Ceph块存储之RBD接口详解
- 1.创建Ceph块存储系统RBD接口
- 1.1 删除镜像
- 1.2 还原镜像
- 1.3 在线扩容
- 1.4 回滚镜像到指定位置
- 1.5 删除快照
- 1.6 快照分层
- 1.7 快照展平
- 1.8 镜像的导出导入
接上文基于ceph-deploy部署Ceph集群详解
1.创建Ceph块存储系统RBD接口
(1)创建一个名为rbd-demo的专门用于RBD的存储池
ceph osd pool create rbd-demo 64 64
(2)将存储池转换为RBD模式
ceph osd pool application enable rbd-demo rbd
(3)初始化存储池
rbd pool init -p rbd-demo # -p 等同于 --pool
(4)创建镜像
rbd create -p rbd-demo --image rbd-demo1.img --size 10G
###可简写为
rbd create rbd-demo/rbd-demo2.img --size 10G
(5)镜像管理
查看存储池下存在哪些镜像
rbd ls -l -p rbd-demo
查看镜像的详细信息
rbd info -p rbd-demo --image rbd-demo1.img
修改镜像大小
rbd resize -p rbd-demo --image rbd-demo1.img --size 20G
rbd info -p rbd-demo --image rbd-demo1.img
#使用 resize 调整镜像大小,一般建议只增不减,如果是减少的话需要加选项 --allow-shrink
rbd resize -p rbd-demo --image rbd-demo1.img --size 5G --allow-shrink
1.1 删除镜像
直接删除镜像
rbd rm -p rbd-demo --image rbd-demo2.img
rbd remove rbd-demo/rbd-demo2.img
推荐使用trash命令,这个命令删除是将镜像移动至回收站,如果想找回还可以恢复
rbd trash move rbd-demo/rbd-demo1.img
rbd ls -l -p rbd-demo
rbd trash list -p rbd-demo
acc62785c8bb rbd-demo1.img
1.2 还原镜像
rbd trash restore rbd-demo/acc62785c8bb
rbd ls -l -p rbd-demo
(6)Linux客户端使用
客户端使用RBD有两种方式:
- 通过内核模块KRBD将镜像映射为系统本地块设备,通常设置文件一般为:/dev/rbd*
- 另一种是通过librbd接口,通常KVM虚拟机使用这种接口。
本例主要是使用Linux客户端挂载RBD镜像为本地磁盘使用。开始之前需要在所需要客户端节点上面安装ceph-common软件包,因为客户端需要调用rbd命令将RBD镜像映射到本地当作一块普通硬盘使用。并还需要把ceph.conf配置文件和授权keyring文件复制到对应的节点。
在管理节点创建并授权一个用户可访问指定的 RBD 存储池
#示例,指定用户标识为client.osd-mount,对另对OSD有所有的权限,对Mon有只读的权限
ceph auth get-or-create client.osd-mount osd "allow * pool=rbd-demo" mon "allow r" > /etc/ceph/ceph.client.osd-mount.keyring
修改RBD镜像特性,CentOS7默认情况下只支持layering和striping特性,需要将其它的特性关闭
rbd feature disable rbd-demo/rbd-demo1.img object-map,fast-diff,deep-flatten
将用户的keyring文件和ceph.conf文件发送到客户端的/etc/ceph目录下
cd /etc/ceph
scp ceph.client.osd-mount.keyring ceph.conf root@client:/etc/ceph
linux客户端操作
#安装ceph-common软件包
yum install -y ceph-common
执行客户端映射
cd /etc/ceph
rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
查看映射
rbd showmapped
rbd device list
断开映射
rbd unmap rbd-demo/rbd-demo1.img
格式化并挂载
mkfs.xfs /dev/rbd0
mkdir -p /data/bb
mount /dev/rbd0 /data/bb
1.3 在线扩容
###在管理节点调整镜像的大小
rbd resize rbd-demo/rbd-demo1.img --size 30G
在线刷新/dev/rbd0设备文件
xfs_growfs /dev/rbd0 #刷新xfs文件系统容量
resize2fs /dev/rbd0 #刷新ext4类型文件系统容量
(7)快照管理
对rb 镜像进行快照,可以保留镜像的状态历史,另外还可以利用快照的分层技术,通过将快照克隆为新的镜像使用。
在客户端写入文件:
echo 1111 > /data/bb/11.txt
echo 2222 > /data/bb/22.txt
echo 3333 > /data/bb/33.txt
在管理节点对镜像创建快照
rbd snap create --pool rbd-demo --image rbd-demo1.img --snap demo1_snap1
###可简写为
rbd snap create rbd-demo/rbd-demo1.img@demo1_snap1
列出指定镜像所有快照
rbd snap list rbd-demo/rbd-demo1.img
用json格式输出
rbd snap list rbd-demo/rbd-demo1.img --format json --pretty-format
1.4 回滚镜像到指定位置
在回滚快照之前,需要将镜像取消镜像的映射,然后再回滚。
在客户端操作
rm -rf /data/bb/*
umount /data/bb
rbd unmap rbd-demo/rbd-demo1.img
在管理节点操作,回滚镜像到快照的位置
rbd snap rollback rbd-demo/rbd-demo1.img@demo1_snap1
在客户端重新映射并挂载
rbd map rbd-demo/rbd-demo1.img --keyring /etc/ceph/ceph.client.osd-mount.keyring --user osd-mount
mount /dev/rbd0 /data/bb
ls /data/bb #发现数据还原回来了
限制镜像可创建快照数
rbd snap limit set rbd-demo/rbd-demo1.img --limit 3
解除限制
rbd snap limit clear rbd-demo/rbd-demo1.img
1.5 删除快照
删除指定快照
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap1
删除所有快照
rbd snap purge rbd-demo/rbd-demo1.img
1.6 快照分层
快照分层支持用快照的克隆生成新镜像,这种镜像与直接创建的镜像几乎完全一样,支持镜像的所有操作。唯一不同的是克隆镜像引用了一个只读的上游快照,而且此快照必须要设置保护模式。
快照克隆
(1)将上游快照设置为保护模式
rbd snap create rbd-demo/rbd-demo1.img@demo1_snap666
rbd snap protect rbd-demo/rbd-demo1.img@demo1_snap666
rbd snap list rbd-demo/rbd-demo1.img #列出指定镜像的所有快照
(2)克隆快照为新的镜像
rbd clone rbd-demo/rbd-demo1.img@demo1_snap666 --dest rbd-demo/rbd-demo666.img
rbd ls -l -p rbd-demo #查看存储池下存在那些镜像
(3)命令查看克隆完成后快照的子镜像
rbd children rbd-demo/rbd-demo1.img@demo1_snap666
1.7 快照展平
通常情况下,通过快照克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响。
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666
#报错snapshot 'demo1_snap666' is protected from removal
如果要删除快照但想保留其子镜像,必须先展平其子镜像,展平的时间取决于镜像的大小。
(1)展平子镜像
rbd flatten rbd-demo/rbd-demo666.img
(2)取消快照保护
rbd snap unprotect rbd-demo/rbd-demo1.img@demo1_snap666
(3)删除快照
rbd snap rm rbd-demo/rbd-demo1.img@demo1_snap666
rbd ls -l -p rbd-demo #在删除掉快照后,查看子镜像依然存在
1.8 镜像的导出导入
- 导出镜像
rbd export rbd-demo/rbd-demo1.img /opt/rbd-demo1.img
- 导入镜像
#卸载客户端挂载,并取消映射
umount /data/bb
rbd unmap rbd-demo/rbd-demo1.img
- 清除镜像下的所有快照,并删除镜像
rbd snap purge rbd-demo/rbd-demo1.img purge:清除
rbd rm rbd-demo/rbd-demo1.img
rbd ls -l -p rbd-demo
- 导入镜像
rbd import /opt/rbd-demo1.img rbd-demo/rbd-demo1.img
rbd ls -l -p rbd-demo