1、RADOS块设备
- RBD(RADOS Block Devices),是一种构建在RADOS存储集群之上为客户端提供块设备接口的存储服务中间层。
- 这类客户端包括虚拟化平台KVM(qemu)
- 云计算操作系统OpenStack或CloudStack
- 操作系统内核使用的块设备
- RBD基于RADOS存储集群中的多个OSD进行条带化,支持存储空间的简配(thin-provisioning)和动态扩容等特性,并能够借助于RADOS集群实现快照、副本和一致性
- BD自身也是RADOS存储集群的客户端,它通过将存储池提供的存储服务抽象为一到多个image(表现为块设备)向客户端提供块级别的存储接口。
客户端访问RBD设备的方式有两种
创建并初始化RBD存储池
]$ ceph osd pool create rbddata 64 # 创建存储池]$ ceph osd pool application enable rbddata rbd # 启用rbd]$ rbd pool init -p rbddata # rbd初始化
查看存储池状态
]$ ceph osd pool stats rbddatapool rbddata id 2
修改存储池副本数
]$ ceph osd pool set rbddata size 1set pool 1 size to 1
查看存储池副本数
]$ ceph osd pool get rbddata sizesize: 3
2.2、image管理
rbd存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备使用。
在rbddata存储池中创建一个大小为1GB的image img1
]$ rbd create img1 --size 1024 --pool rbddata存储池中的各image名称需要唯一。
查看存储池中的image
]$ rbd ls --pool rbddata img1获取指定image的详细信息
# 支持4种命令获取image详细信息 ]$ rbd --image img1 --pool rbddata info ]$ rbd info rbddata/img1 ]$ rbd info --pool rbddata --image img1 ]$ rbd info --pool rbddata img1 rbd image 'img1': # image大小 size 1 GiB in 256 objects # image空间 order 22 (4 MiB objects) # 块大小(条带)的标识序号,有效范围为12-25,分别对应着4K-32M之间的大小 snapshot_count: 0 # 快照数量 id: 5e405878315d # image id block_name_prefix: rbd_data.5e405878315d # 当前image相关的object的名称前缀 format: 2 # image格式,v2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten # 特性 op_features: # 可选的功能特性 flags: create_timestamp: Sun Aug 15 12:35:58 2021 # 创建时间 access_timestamp: Sun Aug 15 12:35:58 2021 modify_timestamp: Sun Aug 15 12:35:58 2021调整image大小
扩展image容量
]$ rbd resize -p rbddata --image img1 --size 2G Resizing image: 100% complete...done.缩小image容量
]$ rbd resize -p rbddata --image img1 --size 1G --allow-shrink
删除image
删除image会导致数据丢失,且不可恢复;建议使用trash命令先将其移入trash,确定不再需要时再从trash中删除。
]$ rbd remove [--pool <pool>] [--image <image>] [--no-progress] <image-spec>
]$ rbd trash {list|move|purge|remove|restore}
2.3、image特性features
ceph支持 layering,striping exclusive lock, object map,fast diff ,deep-flatten等特性。
- layering
- 分层技术。是否支持image的克隆操作,可以对image创建快照并保护,然后从快照克隆出新的image出来,父子image之间采用COW技术,共享对象数据。
- striping
- 是否支持条带化对象数据,类似raid 0,可改善顺序读写场景较多情况下的性能。
- exclusive-lock
- 排它锁,是一个分布式锁,在开启的时候,确保只有一个客户端在访问image,否则锁的竞争会导致io急剧下降。 主要应用场景是qemu live-migration。
- object-map
- 对象位图,主要用于加速导入、导出及已用容量统计等操作,依赖于exclusive-lock特性。
- fast-diff
- 快速比较,此特性依赖于object map和exlcusive lock。快速比较image的snapshot之间的差异。
- deep-flatten
- layering特性使得克隆image的时候,父子image之间采用COW,他们之间的对象文件存在依赖关系,flatten操作的目的是解除父子image的依赖关系
- journaling
- 是否支持日志IO,即是否支持记录image的修改操作至日志对象;依赖于exclusive-lock特性。
data-pool
J版本起,image默认支持的特性有layering、exclusive-lock、object-map、fast-diff和 deep-flatten五个;
- 注意,如果作为Linux客户端加载到内核时,object-map、fast-diff和 deep-flatten三个特性不支持,需要禁用。
- rbd create命令的—feature选项支持创建时自定义支持的特性;
现有image的特性可以使用rbd feature enable或rbd feature disable命令修改
# 禁用特性 ]$ rbd feature disable rbddata/img1 object-map fast-diff deep-flatten3、客户端使用image
在RBD客户端节点上以本地磁盘方式使用块设备之前,需要先将目标image映射至本地内核,而且,若存储集群端启用了CephX认证,还需要指定用户名和keyring文件。
创建用户并生成keyring文件
]$ ceph auth add client.rbduser mon 'allow rw' osd 'allow * pool=rbddata' ]$ ceph auth get client.rbduser -o ceph.client.rbduser.keyring拷贝keyring文件和ceph.conf到客户端主机
]$ scp ceph.client.rbduser.keyring root@10.211.55.3:/etc/ceph/ ]$ scp ceph.conf root@10.211.55.3:/etc/ceph/客户端需要安装ceph-common程序包来支持ceph rbd
]$ yum -y install ceph-common验证指定用户查看集群状态
]$ ceph --user rbduser -s cluster: id: 817bb5ff-1b92-4734-baa8-f21ede4cb9c2 health: HEALTH_OK services: mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 10h) mgr: ceph-mon1(active, since 23h), standbys: ceph-mon2 mds: cephfs:1 {0=ceph-mon1=up:active} osd: 6 osds: 6 up (since 23h), 6 in (since 23h) rgw: 2 daemons active (ceph-mon1, ceph-mon2) task status: data: pools: 7 pools, 256 pgs objects: 215 objects, 4.6 KiB usage: 6.0 GiB used, 378 GiB / 384 GiB avail pgs: 256 active+clean映射image
- 注意,客户端需要映射,用户必须对osd拥有所有权限。
]# rbd --user rbduser map rbddata/img1 /dev/rbd0
- 注意,客户端需要映射,用户必须对osd拥有所有权限。
查看设备信息并格式化挂载image
]$ fdisk -l 磁盘 /dev/rbd0:2147 MB, 2147483648 字节,4194304 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):4194304 字节 / 4194304 字节 ]$ mkfs.xfs /dev/rbd0 # 格式化 ]$ mount /dev/rbd0 /rbdimg # 挂载 ]$ df -h /dev/rbd0 2.0G 33M 2.0G 2% /rbdimg查看已经映射的image
]$ rbd showmapped id pool namespace image snap device 0 rbddata img1 - /dev/rbd0断开映射
]$ umount /rbdimg ]$ rbd unmap rbddata/img14、image快照
