块存储接口是一种主流的存储访问接口,也是常见的存储形态,比如服务器下的/dev/sdx都是块存储设备。你可以像使用磁盘一样来使用Ceph提供的块存储设备。
在创建块存储设备之前,先创建一个池。在创建池之后,对存储进行定义,并创建属于该池的块存储设备。
创建和删除池
查看池
创建池rbd-bak ,包含24个PG
删除池的时候需要将池的名称写两次,并且加上 --yes-i-really-really-mean-it
参数
可以直接向池中写文件
查看pg_num和pgp_num,副本数size大小
RBD设备的配置及使用
创建完池之后,可以在池中创建rbd设备,设备大小可以指定。
[root@ceph-1 ~]# rbd create rbd-bak/image1 --size=256M
[root@ceph-1 ~]# rbd info rbd-bak/image1
块设备创建完毕后保存在池中。如果想要使用,就需要在客户端执行映射操作。
rbd map时候,exclusive-lock, object-map, fast-diff, deep-flatten的features不支持,因此需要先disable,否则会提示RBD image feature set mismatch报错信息
修改rbd块设备特征
BD块设备已映射到本地的/dev/rbd0设备上,可以对其格式化并挂载文件系统
写文件测试:
通过rbd info可以看到块设备存储对象的前缀为rbd_data.1094238e1f29,即存储被切割为多个object,object的前缀以rbd_data.1094238e1f29开头,可以通过rados查看存储池中的obejct,这些object会随着真实使用空间的增长而自动增长
可以在rbd映射的磁盘中写入更多的数据,然后再通过rados查看object的情况,会发现创建了更多的object用于存储数据。object最大数量不会超过2560个,即10G(每个object 4M*2560)
然后取消挂载、取消映射的命令如下:
RBD快照
为rbd块设备创建快照
rbd snap create rbd/image2@v1
然后映射快照设备
原设备映射为/dev/rbd0
快照设备映射为/dev/rbd1
设置设备为只读设备:
[root@ceph-1 ~]# blockdev --getro /dev/rbd0
0
[root@ceph-1 ~]# blockdev --getro /dev/rbd1
1
快照设备和原始设备使用相同的UUID ,
如果需要同时挂载 /dev/rbd0 和 /dev/rbd1,那么方法一是:使用nouuid选项
方法二是先取消挂载原设备,再挂载快照
-o noatime: 不更新文件访问时间
使用快照还原rbd设备中的内容
[root@ceph-2 ~]# rbd showmapped
id pool image snap device
0 rbd image2 - /dev/rbd0
1 rbd image2 v1 /dev/rbd1
删除快照
删除快照、取消挂载、取消映射
[root@ceph-2 ~]# umount /snap
[root@ceph-2 ~]# rbd snap rm rbd/image2@v1
[root@ceph-2 ~]# rbd snap ls rbd/image2
[root@ceph-2 ~]# rbd showmapped
id pool image snap device
0 rbd image2 - /dev/rbd0
1 rbd image2 v1 /dev/rbd1
[root@ceph-2 ~]# rbd unmap /dev/rbd1
[root@ceph-2 ~]#
[root@ceph-2 ~]# umount /mnt
[root@ceph-2 ~]# rbd unmap /dev/rbd0
[root@ceph-2 ~]#
[root@ceph-2 ~]# rbd showmapped
[root@ceph-2 ~]#
RBD块设备的克隆
取消映射、删除克隆、取消快照的保护
[root@ceph-2 ~]# rbd unmap /dev/rbd0
[root@ceph-2 ~]#
[root@ceph-2 ~]# rbd rm rbd/clone1
Removing image: 100% complete...done.
[root@ceph-2 ~]#
[root@ceph-2 ~]# rbd snap unprotect rbd/image2@v1
[root@ceph-2 ~]#
RBD 块设备数据的导出和导入
RBD块设备数据的导入、导出常常用于块设备的简单备份和恢复。
下面简单模拟一下:
使用ceph块的两种途径
通过Kernel Module
创建了rbd设备之后,把它映射(map)到内核中,成为一个虚拟的块设备。这时这个块设备同其他通用块设备一样,设备文件一般为/dev/rbd0。后续直接使用这个块设备文件就可以了。可以把/dev/rbd0格式化后挂载到某个目录,也可以直接作为裸设备进行使用。
创建rbd块设备
映射rbd块设备
格式化映射后的块设备并挂载文件系统
生成文件测试
先取消挂载mount,再取消映射
通过librbd
创建了rbd设备后,通过librbd、librados库访问和管理块设备。这种方式直接调用了librbd提供的借口,实现了对rbd设备的访问和管理,不会在客户端产生块设备。