Ceph的专有名词 | |
OSDs | 存储设备 |
Monitors | 集群监控组件 |
MDSs | 存放文件系统的元数据 |
部署Ceph分布式存储
Ceph集群中一般是一个管理服务器(control)多个存储服务器(node),所以下面所有关于存储服务器的操作都需要对每个存储器进行操作(主机名为node1的操作需要在每个存储服务器上进行一次)
0. 部署前准备工作:
0.1 我们进行配置操作前,要先将所有服务器配置好yum网络等基本配置
0.2 让管理服务器可以免密登陆其他所有的存储服务器
0.3 在管理服务器上安装 ceph-deploy(管理Ceph的软件)
0.4 在管理服务器上创建一个ceph的工作目录(我设置的名字叫ceph-path)
0.5 让所有设备都绑定一个NTP时间同步服务器,并且所有设备的chronyd服务都配好了,具体查看…………………………………………
1. 部署集群:
1.1 创建Ceph集群: (必须前往控制服务中创建用于ceph工作的目录中)
[root@control ceph-path]# ceph-deploy new 存储设备的IP1 存储设备的IP2 ………………
1.2 然后给集群中服务器装包:ceph-osd ceph-mds ceph-mon ceph-radosgw
不过我们不是一个一个到存储服务器上进行yum安装,可以直接在Ceph管理服务器上进行控制:
[root@control ceph-path]# ceph-deploy install 存储设备的IP1 存储设备的IP2 ………………
1.3 初始化所有节点的mon服务(不需要再次指定存储服务器的IP,因为他默认的IP是创建的Ceph集群中的所有IP)
[root@control ceph-path]# ceph-deploy mon create-initial
2. 部署每个存储服务器的OSD
2.1 准备磁盘 ,将其中一个磁盘作为日志存储盘(journal盘),根据每个存储设备中除了日志存储盘还有其他几个盘来分,有几个盘就把日志存储盘平均分成几部分,日志存储盘一个分区对应一个数据存储磁盘
(例子是存储盘一共有4个盘,1个作为日志存储盘,3个作为存储盘,所以日志盘分成3份)
[root@node1 ~]# parted 选定的日志存储盘 mklabel gpt
[root@node1 ~]# parted 选定的日志存储盘 mkpart primary 1M 33%
[root@node1 ~]# parted 选定的日志存储盘 mkpart primary 33% 66%
[root@node1 ~]# parted 选定的日志存储盘 mkpart primary 66% 100%
2.2 把日志存储盘及其分区的所有者和所属组改为ceph,让ceph用户拥有对磁盘的读写权限,到时候写磁盘的时候软件就是用ceph用户的身份进行操作
[root@node1 ~]# chown ceph:ceph /dev/vdb* ; \
echo 'chown ceph:ceph /dev/vdb*' >> /etc/rc.local ; \
chmod +x /etc/rc.local
2.3 初始化清空磁盘数据
[root@control ceph-path]# for i in 存储设备的IP1 存储设备的IP2 ……
do
ceph-deploy disk zap $i:数据存储磁盘名1 $i:数据存储磁盘名2 ……
done
2.4 创建OSD存储空间
[root@control ceph-path]# for i in 存储设备的IP1 存储设备的IP2 ……
do
ceph-deploy osd create $i:存储磁盘名1:/dev/日志存储盘中对应的分区 $i:存储磁盘名2:/dev/日志存储盘中对应的分区 ……
done
# 如果出问题了,可以使用下面命令修复,然后再尝试创建
# [root@control ceph-path]# ceph-deploy gatherkeys 存储设备的IP1 存储设备的IP2 ……
2.5 检查OSD存储空间
[root@control ceph-path]# ceph -s
# 如果出现 health HEALTH_OK 那么就是成功的,就不需要其他的操作了,否则就有问题,需要做修复和查错!
# 如果出现 HEALTH_WARN \n clock skew detected on 那就说明NTP时间同步有问题
# 如果只出现了 HEALTH_WARN 那么就尝试重启服务
# [root@control ceph-path]# systemctl restart ceph\*.service ceph\*.target
2.6 查看各个服务器的ceph服务情况(ceph开头的server、target结尾的服务都是)
[root@node1 ~]# systemctl status ceph\*.service ceph\*.target
# 也可以过滤一下,看看有没有没起来的服务
# [root@node1 ~]# systemctl status ceph\*.service ceph\*.target | grep 'inactive'
2.7 排错的时候,可以查看管理服务器的ceph日志,查看里面有哪些错误
[root@control ceph-path]# cat -n ceph-deploy-ceph.log | grep ERROR
3. 建立块存储
块存储可以理解为一种存储设备,块存储分为单机块存储(光盘、磁盘)和分布式块存储(Ceph)。
而Ceph块存储可以理解为,他是把零散的多个服务器的一个个OSD块存储结合成一个大的存储设备,这个大的设备就叫存储池(rbd池)
每个Ceph块设备都有存储池,默认就有一个,然后在存储池里有多个镜像。
在使用块设备的时候,我们也要进行“分区”——创建镜像,并不是真的分区,但可以理解为磁盘分区,他就是把存储池的存储空间进行分割,然后每个镜像在进行具体的其他的操作,所以,我们真正使用的时候用的是镜像
在部署镜像的时候,如果其所在存储池就是默认存储池rbd,则可以不写存储池名
对于镜像的基本操作: 在任意一个服务器(管理或者存储)进行操作都可以,并且会相互同步
查看存储池
[root@node1 ~]# ceph osd lspools
创建存储池
[root@node1 ~]# ceph osd pool create 存储池名 创建多少个目录用来存储设备(128个)
删除存储池(存储池名字要一模一样的写两次)
[root@node1 ~]# ceph osd pool delete 存储池名 存储池名 --yes-i-really-really-mean-it
查看镜像
[root@node1 ~]# rbd info 存储池名/镜像名
创建镜像
[root@node1 ~]# rbd create 存储池名/镜像名 --image-feature layering(镜像样式) --size 大小
修改镜像大小
[root@node1 ~]# rbd resize --size 修改到的镜像大小(M/G) 存储池名/镜像名 --allow-shrink
把镜像设备映射到本机
[root@node1 ~]# rbd map 存储池名/镜像名
# 然后界面会返回一个磁盘位置,然后我们就可以对这个设备进行分区挂载格式化等操作
删除镜像(如果镜像有快照必须先删除快照文件)
[root@node1 ~]# rbd rm 存储池名/镜像名
3.1 创建一个镜像
3.2 配置客户端使用Ceph存储连接镜像(client主机为客户端)
3.2.1 安装软件包 ceph-common
3.2.2 拷贝Ceph存储集群的配置文件:
把管理服务器中的ceph配置文件和链接密钥拷贝到本机/etc/ceph上
其中 ceph.conf 是用来确定集群的信息,让客户端知道集群在哪里
其中 ceph.client.admin.keyring 是用来确定链接,使客户端有权限连接ceph集群
[root@client ~]# scp 管理服务器的IP:/etc/ceph/ceph.conf 管理服务器的IP:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
3.2.3 把Ceph集群镜像映射为本地磁盘(和服务器把镜像设备映射到本机一样的操作)
[root@client ~]# rbd map 存储池名/镜像名
3.2.4 查看Ceph集群的挂载情况
[root@client ~]# rbd showmapped
3.3 然后用户就可以像操作本机磁盘一样对Ceph磁盘进行使用。
4. 利用COW技术给ceph存储集群做快照备份
COW -- Copy Online Writ 写时复制
其操作原理就是,建立快照后,当客户端对磁盘镜像进行写操作的时候,就保存修改前的文件到快照中,也就是说,刚刚创建的新快照是不占用任何存储空间的,只有数据发生变更了,才会把旧数据保存到快照中。
而做快照是为了恢复数据,所以,只有数据发生了变更,快照才会记录,一开始可能分配了和磁盘镜像一样的空间,单实际上并没有使用那么多。
什么操作算写操作呢?删除、修改、添加任何数据,那么只要有前面的任意一个操作,快照就会工作进行记录。
4.0 查看Ceph块存储镜像的快照信息:
[root@node1 ~]# rbd snap ls 存储池名/镜像名
4.1 如何在需要保存数据的时候在服务器上创建快照
[root@node1 ~]# rbd snap create 存储池名/镜像名 --snap 快照名
4.2 如何创建将磁盘数据还原到快照的状态
4.2.1 客户端解除挂载
[root@client ~]# umount 镜像挂载的位置
4.2.2 服务端解还原快照
[root@node1 ~]# rbd snap rollback 存储池名/镜像名 --snap 快照名
4.2.3 客户端重新挂载
[root@client ~]# mount 镜像所在的系统位置(rbd map 命令查到的结果) 镜像挂载的位置
注:
1. 还原的时候,其顺序可以有改变,但是,最好不要改变,否则会有一些问题出现,如果服务器的时间不一致,则数据还原会失败
2. 还原的时候如果出现客户端不能挂载,那就就在管理服务器上重新还原一下快照即可
4.3 删除快照
[root@node1 ~]# rbd snap rm 存储池名/镜像名 --snap 快照名
5. 快照克隆
根据快照制作一个镜像的克隆出来,这个克隆可以当作一个镜像进行使用,只不过这里面有原镜像拍摄快照的时候的所有数据信息,包括文件格式化的信息等,所以快照克隆可以理解为以快照拍摄时期的镜像为模板,克隆出一个和当时一模一样的镜像出来。
但是是克隆的镜像数据大多来源于快照链,也就是他不能脱离原镜像独立使用,如果要独立使用要做其他的操作,不过消耗时间会多不少,下面会具体讲述。
查看集体克隆的信息:(其实克隆就是一个镜像,所以其基本操作和不同镜像一样)
[root@node1 ~]# rbd info 克隆名
删除克隆:
[root@node1 ~]# rbd rm 克隆名
5.1 必须先把要克隆的快照保护起来(使其不能被删除或者修改)
[root@node1 ~]# rbd snap protect 镜像名 --snap 快照名
5.2 创建快照的克隆
# 没有快照可以现在制作,然后继续操作,制作快照的方法在上面
[root@node1 ~]# rbd clone 镜像名 --snap 快照名 克隆名字 --image-feature layering(镜像样式)
# 如果希望克隆的镜像可以独立使用,不与原镜像和快照有关系就要把整个原镜像进行拷贝
# [root@node1 ~]# rbd flatten 克隆名字
5.3 解除保护
[root@node1 ~]# rbd snap unprotect 镜像名 --snap 快照名
5.4 配置客户端连接镜像进行操作(和对待普通镜像一样的操作)
总结:
快照克隆出来的就是一个镜像,可以当作一个镜像进行操作。
查看命令: | |
ceph -s | 检查Ceph存储的管理服务器部署是否成功 |
rbd info 镜像名 | 查看镜像信息 |
rbd snap ls 镜像名 | 查看镜像快照信息 |
配置Ceph服务基本思路 | ||
环境 | 搭建几个存储服务器里面配置至少2个用于存储的磁盘(至少要一个日志存储一个数据存储) | |
搭建一个控制服务器可以免密登陆所有的存储服务器,安装管理软件ceph-deploy,创建个存储服务配置的目录(所有操作都在这里面进行) | ||
几个服务器都绑定一个NTP服务器,开启chronyd服务,保证时间同步 | ||
建集群 | 创建 | ceph-deploy new 存储设备…… |
装包 | ceph-deploy install 存储设备…… | |
初始化 | ceph-deploy mon create-initial | |
建OSD | 配置磁盘 | 到各个磁盘把预定的日志存储盘分成等同数据存储个数的区 |
赋予权限 | 给日志存储盘所有分区ceph用户都有读写权限 | |
清空磁盘 | ceph-deploy disk zap 存储设备:数据存储磁盘…… | |
建立OSD | ceph-deploy osd create 存储设备:数据存储磁盘:/dev/日志存储盘中对应的分区…… | |
建块存储 | 创建镜像 | rbd create 镜像名 --image-feature layering(镜像样式) --size 大小 |
配置客户端 | 装包ceph-common、拷贝配置文件ceph.conf和ceph.client.admin.keyring | |
映射镜像 | rbd map 镜像名 | |
做备份 | 创建快照 | rbd snap create 镜像名 --snap 快照名 |
还原 | 解挂 、 还原rbd snap rollback 镜像名 --snap 快照名 、 挂载 | |
克隆服务器 | 保护快照 | rbd snap protect 镜像名 --snap 快照名 |
创建克隆 | bd clone 镜像名 --snap 快照名 克隆名字 --image-feature layering(镜像样式) | |
解除保护 | rbd snap unprotect 镜像名 --snap 快照名 |