目录
Ceph集群搭建参照:Ceph集群部署_桂安俊@kylinOS的博客-CSDN博客
以下Ceph存储实验环境均基于上述Ceph集群环境搭建。
所有的块设备必须在一个存储池中,ceph默认有一个rbd池:
- # 在任意一个node节点执行,查看所有存储池
- ceph osd lspools

块设备也叫镜像,每创建一个镜像,对应的就是一个块设备,在服务端创建完镜像,客户端就可以访问这个镜像(块设备):
- #在任意node节点操作
-
- #创建镜像写法一,不指定存储池,那默认就放到rbd默认存储池下
- #create为创建,jacob为自定义镜像名称,--image-feature后面跟这个镜像支持哪些功能,layering指支持分层功能(允许快照和写时复制),--size 10G为指定镜像存储大小
- rbd create jacob --image-feature layering --size 10G
-
- #创建镜像写法二,指定存储池,那默认就放到rbd默认存储池下
- #在rbd存储池下创建名为nb的镜像块设备,大小为10G
- rbd create rbd/nb --image-feature layering --size 10G
【注】:如上创建镜像的时候,创建的镜像存储大小可以大于实际总存储池大小,存储池不会立刻分配全部大小给镜像,只是当实际写入存储内容超过存储池大小是,会写入失败,等后面存储池扩容时,就可以继续成功写入。
查看镜像:
- rbd list #查看所有镜像
-
- rbd info jacob #查看jacob镜像详细信息

(1)扩容
- rbd resize jacob --size 15G #从原来的10G扩容至15G
-
- rbd info jacob #查看jacob镜像详情

(2)缩容
- #因为缩容会有丢数据风险,所以这里比扩容多了一个--allow-shrink参数
- rbd resize jacob --size 7G --allow-shrink
-
- #查看缩容后大小
- rbd info jacob

客户端需要安装ceph-common软件包:
yum install ceph-common -y
如果安装没找到ceph-common包,可能是因为没有挂载ceph源,ceph源挂载参照Ceph集群部署_桂安俊@kylinOS的博客-CSDN博客,本文所有环境均基于前文Ceph集群部署完成。
客户端要想访问到ceph共享存储,需要完成以下2步:
- #随便拷贝一份node节点的ceph配置文件和keying密钥文件,每个节点配置文件和密钥文件都一样
- scp root@node1:/etc/ceph/ceph.conf /etc/ceph/
-
- scp root@node1:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
- #获取jacob共享
- rbd map jacob
-
- lsblk #查看客户端本地多了一个磁盘

- #上面还创建了一个nb镜像,也可以获取
- rbd map nb
-
- lsblk

查看磁盘和ceph集群对应关系:
rbd showmapped

客户端获取到磁盘后,就可以和本地磁盘一样使用,可以格式化、挂载、写入数据等
- #格式化为xfs格式
- mkfs.xfs /dev/rbd0
-
- #挂载
- mount /dev/rbd0 /mnt
-
- #写入数据
- echo "test" > /mnt/test.txt
ceph支持存储快照,前文提过ceph是默认是3副本,那为什么还要做快照?副本概念是预防存储设备故障时保障数据安全(数据写入时存3份),解决的是单点故障的问题。但如果不是设备故障,是人为误删,那副本概念就不能实现数据恢复,而定期做快照,可以保证数据误删的时候进行快照恢复。
- #node1操作
- #查看jacob的快照,默认没有快照
- rbd snap ls jacob
-
- #创建快照,为jacob镜像创建快照,快照名称为jacob-snap1
- rbd snap create jacob --snap jacob-snap1
-
- #查看快照
- rbd snap ls jacob

模式数据丢失,在客户端删除数据:
- #在客户端操作,将之前创建的txt删除
- rm -rf /mnt/test.txt
-
- #快照恢复之前,必须要将客户端镜像存储先卸载,不支持在线数据恢复
- umount /mnt
回滚快照,还原数据(在node节点操作):
- # 在node节点还原快照
- rbd snap rollback jacob --snap jacob-snap1
客户端重新挂载分区,检查数据是否恢复(在client端操作):
- mount /dev/rbd0 /mnt
-
- cat /mnt/test.txt

(以下均在client操作)
- #像普通存储一样umount取消挂载
- umount /mnt
- #取消前先查看一下
- rbd showmapped

- #取消映射
- rbd unmap /dev/rbd0
-
- #查看是否取消成功
- rbd shwmapped

可以看到原来的jacob rbd0已经没有了。