本章概述
- RBD 架构图
- 创建存储池
- 创建 img 镜像
- 配置客户端使用 RBD
- 镜像快照
6.1 RBD 架构图
Ceph 可以同时提供对象存储 RADOSGW、块存储 RBD、文件系统存储 Ceph FS,RBD 即RADOS Block Device 的简称,RBD 块存储是常用的存储类型之一,RBD 块设备类似磁盘可以被挂载,RBD 块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在 Ceph 集群的多个 OSD 中。
条带化技术就是一种自动的将 I/O 的负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把他们分别存储到不同磁盘上去。这就能使多个进程同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序候可以获得最大程度上的 I/O 并行能力,从而获得非常好的性能
6.2 创建存储池
创建存储池:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool create rbd-data1 32 32
查看存储池:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool ls
在存储池启用 rbd:
命令格式:
osd pool application enable <poolname> <app> {--yes-i-really-mean-it} enable use of an application <app> [cephfs,rbd,rgw] on pool <poolname>
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool application enable rbd-data1 rbd
初始化rbd:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd pool init -p rbd-data1
6.3 创建 img 镜像
rbd 存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用。rbd 命令可用于创建、查看及删除块设备相在的映像(image),以及克隆映像、创建快照、将映像回滚到快照和查看快照等管理操作。例如,下面的命令能够在指定的 RBD 即 rbd-data1 创建一个名为 myimg1 的映像
6.3.1 创建镜像
查看帮助命令:rbd help create
创建两个镜像:
rbd create data-img1 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
rbd create data-img2 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
查看镜像:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-data1
6.3.2 查看镜像详细信息
查看镜像详细信息:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-img2 --pool rbd-data1 info
cephadmin@ceph-deploy:~/ceph-cluster$ rbd --image data-img1 --pool rbd-data1 info
以json格式显示镜像信息:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls --pool rbd-data1 -l --format json --pretty-format
6.3.3 镜像的其它特性
查看镜像特性:
rbd help feature enable
特性简介:
layering: 支持镜像分层快照特性,用于快照及写时复制,可以对 image 创建快照并保护,然后从快照克隆出新的 image 出来,父子 image 之间采用 COW 技术,共享对象数据。
striping: 支持条带化 v2,类似 raid 0,只不过在 ceph 环境中的数据被分散到不同的对象中,可改善顺序读写场景较多情况下的性能。
exclusive-lock: 支持独占锁,限制一个镜像只能被一个客户端使用。
object-map: 支持对象映射(依赖 exclusive-lock),加速数据导入导出及已用空间统计等,此特性开启的时候,会记录 image 所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速 io。
fast-diff: 快速计算镜像与快照数据差异对比(依赖 object-map)。
注意:object-map和fast-diff互为依赖,开启其中一个,另一个就会开启,关闭时也是如此
deep-flatten: 支持快照扁平化操作,用于快照管理时解决快照依赖关系等。
journaling: 修改数据是否记录日志,该特性可以通过记录日志并通过日志恢复数据(依赖独占锁),开启此特性会增加系统磁盘 IO 使用。
jewel版(ceph j版)默认开启的特性包括: layering/exlcusive lock/object map/fast diff/deep flatten
6.3.4 镜像特性的启用和禁用
6.3.4.1 镜像特性的启用
注意:由于某些特性存在依赖关系,因此开启某些特性之前要先开启其依赖的其它特性。
如:object-map特性依赖exclusive-lock 特性,因此开启object-map 特性需要先开启exclusive-lock。
查看当前data-img1镜像特性:
rbd --image data-img1 --pool rbd-data1 info #可以看到只存在layering特性
1、直接开启object-map特性,由于其依赖exclusive-lock特性,因此会开启失败
rbd feature enable object-map --pool rbd-data1 --image data-img1
报错如下:
2、按照依赖顺序开启指定存储池中的指定镜像的特性:
$ rbd feature enable exclusive-lock --pool rbd-data1 --image data-img1
$ rbd feature enable object-map --pool rbd-data1 --image data-img1
$ rbd feature enable fast-diff --pool rbd-data1 --image data-img1
查看特性是否启用:
rbd --image data-img1 --pool rbd-data1 info #三个特性已开启
6.3.4.2 镜像特性的禁用
注意:关闭特性时,与开启顺序相反,关闭某些特性之前要先关闭依赖该特性的其它特性。
如:object-map特性依赖exclusive-lock 特性,因此关闭exclusive-lock 特性需要先关闭object-map。
示例:
1、关闭exclusive-lock特性,由于object-map依赖该特性,关闭时会报错
cephadmin@ceph-deploy:~/ceph-cluster$ rbd feature disable exclusive-lock --pool rbd-data1 --image data-img1
报错如下:
2、先关闭object-map,在关闭exclusive-lock
(1)关闭object-map特性:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd feature disable object-map --pool rbd-data1 --image data-img1
查看data-img1特性,object-map已关闭
(2)关闭exclusive-lock特性
6.4 配置客户端使用 RBD
在 centos 客户端挂载 RBD,并分别使用 admin 及普通用户挂载 RBD 并验证使用。
6.4.1 客户端环境准备
6.4.1.1 客户端配置yum源
客户端要想挂载使用 ceph RBD,需要安装 ceph 客户端组件 ceph-common,但是ceph-common 不在 centos 的 yum 仓库,因此需要单独配置 yum 源。
准备两台客户端服务器:
ceph-client1 172.31.7.151
ceph-client2 172.31.7.152
分别在两台客户端服务器配置 yum 源:
yum install epel-release
yum install https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/ceph-release-1-1.el7.noarch.rpm -y
6.4.1.2 客户端安装ceph-common
yum install ceph-common #自动创建/etc/ceph目录,用于存放ceph的配置文件
6.4.2 客户端使用admin账户挂载并使用RBD
使用admin用户挂载并使用RBD的操作步骤参考4.1.3章节,这里不再重复。
6.4.3 客户端使用普通账户挂载并使用RBD
测试客户端使用普通账户挂载并使用 RBD
6.4.3.1 创建普通账户并授权
在deploy节点创建普通账户test01:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth add client.test01 mon 'allow r' osd 'allow rwx pool=rbd-data1'
查看普通账户test01信息:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.test01
创建普通用户keyring文件
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-authtool --create-keyring ceph.client.test01.keyring
将普通用户test01信息导出到keyring文件
cephadmin@ceph-deploy:~/ceph-cluster$ ceph auth get client.test01 -o ceph.client.test01.keyring
查看keyring文件
cephadmin@ceph-deploy:~/ceph-cluster$ cat ceph.client.test01.keyring
6.4.3.2 同步普通用户认证文件
在deploy节点执行命令同步普通用户认证文件到客户端
scp ceph.conf ceph.client.test01.keyring root@172.31.7.151:/etc/ceph/ #同步ceph.conf配置文件是为了让客户端知道mon节点的地址
6.4.3.3 在客户端验证权限
在ceph-client1节点172.31.7.151上:
查看认证文件是否已经同步过来
[root@ceph-client1 ceph]#ls -lh /etc/ceph
使用普通用户查看ceph集群信息
[root@ceph-client1 ceph]#ceph --user test01 -s #选项—user可以指定用户,默认是admin用户,这里通过test01账户查看集群信息,test01账户具有读权限,因此可以查看集群信息
6.4.3.4 在客户端映射RBD
使用普通用户权限映射 rbd
映射rbd:
[root@ceph-client1 ceph]# rbd --user test01 -p rbd-data1 map data-img1
[root@ceph-client1 ceph]# rbd --user test01 -p rbd-data1 map data-img2
查看块设备:
6.4.3.5 在客户端格式化并使用rbd镜像
1、在客户端对/dev/rbd0和/dev/rbd1进行格式化
mkfs.ext4 /dev/rbd0
mkfs.xfs /dev/rbd1
2、挂载rbd
创建挂载目录
mkdir /data
挂载
mount /dev/rbd0 /data
mount /dev/rbd1 /mnt
3、查看磁盘
4、在deploy节点查看rbd镜像状态
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls -p rbd-data1 -l
6.4.3.6 在客户端查看ceph内核模块
ceph模块已经内置在内核中
[root@ceph-client1 ceph]#lsmod |grep ceph
[root@ceph-client1 ceph]#modinfo libceph
6.4.4 镜像拉伸
场景:随着数据量的增加,rbd镜像空间不足,需要对rbd镜像进行横向扩展
6.4.4.1 查看当前rbd空间大小
1、在deploy节点查看当前rbd空间大小
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls -p rbd-data1 -l #分别是3G
2、在客户端查看挂载的磁盘大小
[root@ceph-client1 ceph]#df -Th
6.4.4.2 对rbd镜像空间进行拉伸
镜像拉伸命令格式:
1、在客户端服务器172.31.7.151上卸载已经挂载的磁盘
umount /data #卸载/dev/rbd0,对应data-img1镜像
umount /mnt #卸载/dev/rbd1,对应data-img2镜像
2、在deploy节点对rbd镜像进行拉伸
rbd resize --pool rbd-data1 --image data-img1 --size 20G #将data-img1镜像拉伸到20G
rbd resize --pool rbd-data1 --image data-img1 --size 10G #将data-img1镜像拉伸到10G
查看镜像大小,已经扩展到目标大小
6.4.4.3 客户端验证镜像空间
1、在客户端服务器172.31.7.151上重新挂载磁盘
[root@ceph-client1 ceph]#mount /dev/rbd0 /data
[root@ceph-client1 ceph]#mount /dev/rbd1 /mnt
2、使用fdisk命令查看磁盘大小已经扩展成功
但是使用df命令查看磁盘情况,发现磁盘空间大小没变,需要重新识别磁盘
3、重新识别磁盘大小
两个磁盘/dev/rbd0为ext4格式,/dev/rbd1为xfs格式,不同格式的磁盘需要的命令不同。
命令如下:
ext4格式磁盘重新识别命令:resize2fs /dev/rbd0
xfs格式磁盘重新识别命令:xfs_growfs /dev/rbd1
4、再次查看磁盘空间,已经恢复正常
6.4.4.4 设置开机自动挂载
1、在客户端服务器配置开机启动项
[root@ceph-client1 ceph]# vim /etc/rc.d/rc.local #在该文件加入以下内容
rbd --user test01 -p rbd-data1 map data-img1
rbd --user test01 -p rbd-data1 map data-img2
mount /dev/rbd0 /data
mount /dev/rbd1 /mnt
2、重启客户端服务器 #注意:该步骤仅用于实验测试,生产环境下,该步骤可忽略不做
reboot
3、查看磁盘,发现没有挂载成功,这是因为centos7操作系统,/etc/rc.d/rc.local文件没有执行权限,因此开机不会执行该文件
查看/etc/rc.d/rc.local文件权限,发现没有执行权限
给该文件添加执行权限
[root@ceph-client1 ~]#chmod a+x /etc/rc.d/rc.local
然后再次重启
4、验证:
查看磁盘情况,挂载成功
查看映射
[root@ceph-client1 ~]#rbd showmapped
6.4.5 卸载rbd镜像
在客户端服务器执行命令:
1、删除开机启动项配置
[root@ceph-client1 ceph]# vim /etc/rc.d/rc.local #在该文件删除以下内容
rbd --user test01 -p rbd-data1 map data-img1
rbd --user test01 -p rbd-data1 map data-img2
mount /dev/rbd0 /data
mount /dev/rbd1 /mnt
2、卸载磁盘
umount /data
umount /mnt
3、关闭映射关系
rbd --user test01 -p rbd-data1 unmap data-img1
rbd --user test01 -p rbd-data1 unmap data-img2
4、验证
查看映射:
查看磁盘:
6.4.6 删除rbd镜像
1、在deploy节点执行命令:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd rm --pool rbd-data1 --image data-img1
2、查看rbd镜像,data-img1已经不存在
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls -p rbd-data1 -l
6.4.7 rbd镜像回收站机制
删除的镜像数据无法恢复,但是还有另外一种方法可以先把镜像移动到回收站,后期确认删除的时候再从回收站删除即可。
1、查看rbd镜像
cephadmin@ceph-deploy:~/ceph-cluster$ rbd ls -p rbd-data1 -l
2、将镜像移动到回收站
cephadmin@ceph-deploy:~/ceph-cluster$ rbd trash move --pool rbd-data1 --image data-img2
3、查看回收站的镜像
cephadmin@ceph-deploy:~/ceph-cluster$ rbd trash list --pool rbd-data1 #镜像名称前的字符串为回收站中rbd镜像ID
4、还原镜像:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd trash restore --pool rbd-data1 --image data-img2 --image-id d49adf73593 #指定存储池、镜像名称、镜像ID
5、删除回收站的镜像
如果镜像不再使用,可以直接使用 trash remove 将其从回收站删除
cephadmin@ceph-deploy:~/ceph-cluster$ rbd trash remove --pool rbd-data1 d49adf73593 #只需要指定存储池和镜像id即可
6.5 镜像快照
常用命令:
cephadmin@ceph-deploy:~/ceph-cluster$ rbd help snap
snap create (snap add) #创建快照
snap limit clear #清除镜像的快照数量限制
snap limit set #设置一个镜像的快照上限
snap list (snap ls) #列出快照
snap protect #保护快照被删除
snap purge #删除所有未保护的快照
snap remove (snap rm) #删除一个快照
snap rename #重命名快照
snap rollback (snap revert) #还原快照
snap unprotect #允许一个快照被删除(取消快照保护)
6.5.1 在rbd镜像存放数据
在deploy节点执行命令
1、创建镜像
rbd create data-img3 --size 3G --pool rbd-data1 --image-format 2 --image-feature layering
在客户端执行命令:
2、创建映射
[root@ceph-client1 ~]#rbd --user test01 -p rbd-data1 map data-img3
3、格式化然后挂载
[root@ceph-client1 ~]#mkfs.ext4 /dev/rbd0
[root@ceph-client1 ~]#mount /dev/rbd0 /data
4、在镜像中写入数据并查看
[root@ceph-client1 ~]#cp /var/log/messages /data
[root@ceph-client1 ~]#ls /data
6.5.2 创建快照并验证
命令格式:
rbd help snap create
在deploy节点执行命令:
1、创建快照
rbd snap create --pool rbd-data1 --image data-img3 --snap img3-snap-20230406
2、查看快照
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap list --pool rbd-data1 --image data-img3
6.5.3 删除数据并还原快照
在客户端执行命令:
1、删除挂载磁盘/data/rbd0中的数据并验证
2、还原数据
(1)卸载磁盘挂载
在客户端执行:
umount /data
(2)关闭映射
在客户端执行:
rbd unmap /dev/rbd0
(3)回滚快照
在deploy节点执行:
命令格式:cephadmin@ceph-deploy:~/ceph-cluster$ rbd help snap rollback
rbd snap rollback --pool rbd-data1 --image data-img3 --snap img3-snap-20230406
6.5.4 客户端验证数据
客户端需要重新映射并挂载 rbd
1、映射data-img3
[root@ceph-client1 ~]#rbd --user test01 -p rbd-data1 map data-img3
2、挂载/dev/rbd0并查看数据
[root@ceph-client1 ~]#mount /dev/rbd0 /data
[root@ceph-client1 ~]#ls /data
6.5.5 删除快照
1、查看当前快照
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap list --pool rbd-data1 --image data-img3
2、删除快照
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap remove --pool rbd-data1 --image data-img3 --snap img3-snap-20230406
3、查看快照
6.5.6 快照数量限制
设置和修改快照数量限制
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap limit set --pool rbd-data1 --image data-img3 --limit 30
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap limit set --pool rbd-data1 --image data-img3 --limit 20
清楚快照数量限制
cephadmin@ceph-deploy:~/ceph-cluster$ rbd snap limit clear --pool rbd-data1 --image data-img3
文章评论