文章目录
- rbd存储池
- 镜像管理
- 创建镜像
- 查看镜像
- 删除镜像
- 镜像回收站功能
- 镜像特性管理
- 创建image时指定要启用的特性
- 启用特性(针对已存在的image添加特性)
- 禁用特性(针对已存在的image移除特性)
- 客户端使用RBD
- 镜像快照和克隆
-
官方文档:https://docs.ceph.com/en/quincy/rbd/
rbd(Rados Block Device) ,是构建在rados集群之上的为客户端提供块设备的存储中间层,rbd可以为kvm、vmware等虚拟化技术和云平台(例如openstack、k8s)提供高性能和无限可扩展的存储后端。rbd块设备类似磁盘可以被挂载,rbd基于存储集群中多个osd进行条带化,支持存储空间简配和动态扩容等特性,并能够借助于rados存储集群实现快照、多副本和一致性。
条带化技术就是一种自动的将IO负载均衡到多个物理磁盘上的技术,条带化技术就是将一块连续的数据分成很多小部分并把它们分别存储到不同的磁盘上去,这就使多个进程能同时访问数据的多个不同部分而不会造成磁盘冲突,而且在需要对这种数据进行顺序访问的时候可以获得最大程度上的IO并行能力,从而获得非常好的性能。
rbd存储池
使用rbd时必须要先创建存储池,在存储池上启用rbd并完成初始化。
ceph osd pool create rbd-pool1 32 32
ceph osd pool application enable rbd-pool1 rbd
rbd pool init -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/98314f2b876e436684edb205feb4f589.png)
镜像管理
rbd存储池并不能直接用于块设备,而是需要事先在存储池中创建image,然后把image作为块设备使用,rbd命令用于管理image。
创建镜像
rbd help create
rbd create -p rbd-pool1 --image data-image1 --size 5G
![在这里插入图片描述](https://img-blog.csdnimg.cn/63b606109e6b4e258c5dba4d964e38d5.png)
查看镜像
rbd ls -p rbd-pool1
rbd info data-image1 -p rbd-pool1
rbd info rbd-pool1/data-image1 --format json --pretty-format
![在这里插入图片描述](https://img-blog.csdnimg.cn/2304413c59644c7688fddf1e3b1cc7e5.png)
image详细信息中一些属性含义如下:
size:表示image大小和image包含的对象数量
order:表示对象大小,有效值为12-25,分别对应4k-32M之间
id:表示镜像id
snapshot_count:image快照次数
block_name_prefix:属于此image的对象的名称前缀
format:镜像格式,支持v1和v2,默认v2
features:image启用的特性
*—_time:image的创建时间、访问时间和修改时间
删除镜像
注意: 拥有快照的image是不能删除的,必须先删除其所有快照
rbd remove data-image2 -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/427ef3c26e0745e5b6d5705609caa7a1.png)
镜像回收站功能
直接删除的镜像数据无法恢复,另一种方式是先将镜像移动到回收站,后期确认删除的时候再从回收站删除即可。使用rbd trash命令来管理回收站中的镜像
将镜像移动到回收站
rbd help trash move
rbd trash move -p rbd-pool1 --image data-image2
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc84d6e7886c4f21acba5b35a8360277.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f1dca7c2d5c6483797df1ef1849147bf.png)
查看回收站中的镜像
rbd trash list -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/417d5a5c086641dc9afe132570303a75.png)
从回收站还原镜像
rbd help trash restore
rbd trash restore -p rbd-pool1 --image data-image4 122a3d73d9f1c
![在这里插入图片描述](https://img-blog.csdnimg.cn/f3cd9f6d19ff49aa87a6606772d2b201.png)
从回收站中删除镜像
rbd help trash remove
rbd trash remove -p rbd-pool1 122a3d73d9f1c
![在这里插入图片描述](https://img-blog.csdnimg.cn/b8895d1a1b774a6884831b178394d92b.png)
镜像特性管理
目前image支持的特性如下:
- layering:支持镜像分层快照特性,用于快照写时复制,可以对image创建快照并保护,然后从快照克隆新的image,父子image之间采用cow技术,共享对象数据
- striping:支持条带化v2,类似raid0,只不过在ceph环境中数据被分散到不同的对象中,可改善顺序读写较多的场景
- exclusive-lock:支持独占锁,限制一个image只能被一个客户端使用
- object-map:支持object位图,用于加速导入导出及统计已用空间等,此特性开启的时候,会记录image所有对象的一个位图,用以标记对象是否真的存在,在一些场景下可以加速io,依赖exclusive-lock特性
- fast-diff:支持快速计算镜像与快照间数据差异对比,依赖object-map特性
- deep-flatten:支持快照扁平化操作,用于快照管理时解决依赖关系
- journaling:支持记录image的修改操作到日志,该特性可以通过记录日志并通过日志恢复数据,但会增加磁盘IO使用,依赖exclusive-lock特性
- data-pool:是否支持将image的数据对象存储于纠删码存储池, 主要用于将image的元数据与数据放置于不同的存储池
目前默认开启的特性包括:layering、exclusive-lock、object-map、fast-diff、deep-flatten
可以通过 rbd feature管理image的特性
创建image时指定要启用的特性
rbd create --image data-image2 --image-feature layering --size 4G -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/849450844fc74990a7004a3d3aa0bc11.png)
启用特性(针对已存在的image添加特性)
rbd feature enable
rbd feature enable rbd-pool1/data-image2 exclusive-lock
![在这里插入图片描述](https://img-blog.csdnimg.cn/dca6078309404927b73157e57e5d91c1.png)
需要注意:
- 由于某些特性间存在依赖关系,所以启用一个特性前,必须要先启用它依赖的特性。例如,启用object-map特性前,必须先启用exclusive-lock,否则会报错
- 如果image不存在deep-flatten特性,它是不可添加的,只能在创建image时启用
禁用特性(针对已存在的image移除特性)
rbd help feature disable
rbd feature disable rbd-pool1/data-image2 journaling
![在这里插入图片描述](https://img-blog.csdnimg.cn/1202cdf6530247e180a22f97764c2faa.png)
需要注意:
- 和启用特性类似,由于某些特性间存在依赖关系,所以禁用用一个特性前,必须要先禁用依赖它的特性。例如,启用exclusive-lock特性前,必须先禁用object-map,否则会报错
- 如果image已存在deep-flatten特性,它可以被移除
客户端使用RBD
客户端访问RBD块设备的方式有两种:
- 通过内核模块rbd.ko把RBD块设备映射为节点本地的磁盘
- 另一种是通过librbd库提供的接口访问RBD块设备,它支持多种编程语言。qemu就是使用此类接口
下面以第一种方式为例,使用内核模块挂载RBD块设备使用
客户端想要挂载使用RBD块设备,需要先安装ceph客户端包ceph-common
apt -y install ceph-common
创建账户并授权
ceph auth get-or-create client.rbduser mon 'allow r' osd 'allow rwx pool=rbd-pool1' -o ceph.client.rbduser.keyring
ceph auth get client.rbduser
![在这里插入图片描述](https://img-blog.csdnimg.cn/5297921499eb4f629cd55e16ff2b7fc7.png)
将ceph配置文件和keyring文件分发至客户端
scp ceph.client.rbduser.keyring /etc/ceph/ceph.conf root@192.168.211.15:/etc/ceph/
ceph --user rbduser -s
![在这里插入图片描述](https://img-blog.csdnimg.cn/e9abcd4b83254c2f8e0d5d144fe7290f.png)
创建一个image
rbd --user rbduser create --image data-image3 --size 5G -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/db9938721622493291b51d682ab7bd2c.png)
客户端挂载image
rbd --user rbduser map rbd-pool1/data-image3
rbd showmapped
lsblk
![在这里插入图片描述](https://img-blog.csdnimg.cn/78915aaff22a4b659efc171e6d424803.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9b2595ffe6c2427a90f149f5a73ff429.png)
客户端格式化rbd块设备,写入数据测试
mkfs.xfs /dev/rbd0
mkdir /data
mount /dev/rbd0 /data/
echo "12345 test rbd" > /data/rbd-testfile
cat /data/rbd-testfile
![在这里插入图片描述](https://img-blog.csdnimg.cn/afc7e2b3fc8943598267188d24435e19.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a3bbe8ff7ea747cea6079b26fcc33229.png)
rbd块设备扩容
如果使用过程中image空间不足,可以使用rbd resize对image进行扩容
rbd help resize
rbd resize --size 10G rbd-pool1/data-image3
xfs_growfs /dev/rbd0
resize3fs /dev/rdb0
![在这里插入图片描述](https://img-blog.csdnimg.cn/1c4ada8a27c5400ca6a251f940914432.png)
客户端查看,磁盘大小已更新
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d3576f7b83d42fa933f47573a47400e.png)
配置开机自动挂载(ubuntu20.04为例)
vim /etc/rc.local
rbd --user rbduser map rbd-pool1/data-image3
mount /dev/rbd0 /data/
chmod +x /etc/rc.local
客户端卸载rbd块设备
umount /data
rbd --user rbduser unmap rbd-pool1/data-image3
rbd showmapped
![在这里插入图片描述](https://img-blog.csdnimg.cn/c81c338c16fe43d091b08fbf96f349bf.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c835a9f5288426bb865b33fbf750a01.png)
镜像快照和克隆
快照管理
rbd支持image快照,快照可以保存image历史状态,可以通过快照实现数据快速备份/恢复。另外ceph还支持快照分层机制,从而可以实现快速克隆VM映像
可以使用rbd snap命令管理镜像快照
创建快照
rbd help snap create
rbd snap create -p rbd-pool1 --image data-image3 --snap data-image3-snap1
![在这里插入图片描述](https://img-blog.csdnimg.cn/63faaf4d09174beba090a1fc9e349274.png)
查看快照
rbd snap ls rbd-pool1/data-image3
![在这里插入图片描述](https://img-blog.csdnimg.cn/b7cdd7b5fbe145fea924cfda174a503f.png)
还原快照
umount /data
rbd --user rbduser unmap rbd-pool1/data-image3
rbd help snap rollback
rbd snap rollback -p rbd-pool1 --image data-image3 --snap data-image3-snap1
![在这里插入图片描述](https://img-blog.csdnimg.cn/4a4fc6b31d1a4dc6b5028a8517f324f5.png)
限制快照数量
rbd snap limit set -p rbd-pool1 --image data-image3 --limit 10
rbd snap limit clear -p rbd-pool1 --image data-image3
![在这里插入图片描述](https://img-blog.csdnimg.cn/d5f1a3dc56dd42638906950eeb01b0a0.png)
注意:快照数量过多,必然会导致image上原有数据第一次修改时的IO压力过大
删除快照
rbd help snap rm
rbd snap rm -p rbd-pool1 --image data-image3 --snap data-image3-snap1
rbd snap purge -p rbd-pool1 --image data-image3
![在这里插入图片描述](https://img-blog.csdnimg.cn/32ade55f5d8e4b79a819fbef3059e9b7.png)
克隆镜像
ceph支持在一个快照的基础上创建一个或多个COW或COR类型的克隆镜像,这种机制提供了一种极速创建image的机制。
用户可以创建一个基础image并为其创建一个只读快照,而后在此快照的基础上创建任意个克隆镜像进行读写操作,甚至能够进行多级克隆。例如openstack对接ceph rbd时,就可以利用此特性快速批量创建卷启动的虚拟机。
通过克隆创建的image功能上和直接创建的image几乎完全相同,同样支持读写、克隆和扩缩容等功能。唯一不同之处是克隆的image引用了一个上游的只读快照,而且此快照必须置于保护模式。
在rbd上使用分层克隆的方法很简单,首先创建一个image,对image创建一个快照并置于保护模式,然后克隆此快照即可。另外,克隆镜像支持跨存储池进行。
![在这里插入图片描述](https://img-blog.csdnimg.cn/57545227706e4fe9b8d3188bce214f32.png)
创建一个image data-image5
rbd create --size 11G -p rbd-pool1 --image data-image5
rbd ls -p rbd-pool1
![在这里插入图片描述](https://img-blog.csdnimg.cn/e18d85605b3b44c7931a5d8484da2d98.png)
为data-image5创建快照snap1,并置于保护模式
rbd snap create --image data-image5 -p rbd-pool1 --snap snap1
rbd snap protect --image data-image5 -p rbd-pool1 --snap snap1
![在这里插入图片描述](https://img-blog.csdnimg.cn/bf7e0ee1424d41dc843884300b8d7e6f.png)
快照置于保护模式是无法被删除的,如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/450cb3ad7c074f7fbe8f1402bf87b369.png)
从data-image5的快照克隆一个镜像data-image6
rbd clone -p rbd-pool1 --image data-image5 --snap snap1 --dest-pool rbd-pool1 --dest data-image
![在这里插入图片描述](https://img-blog.csdnimg.cn/1502dd9e6f3a4da3a1c89961b8f7388a.png)
查看克隆镜像的详情,其中的parent属性指定了克隆镜像所依赖的上游快照,如上图所示。
查看快照的子项
rbd children -p rbd-pool1 --image data-image5 --snap snap1
![在这里插入图片描述](https://img-blog.csdnimg.cn/1b773904b2414a11b73ed3383ea1c64b.png)
展平克隆的image(flatten)
- 如果需要删除快照,必须先接触克隆的image对快照的依赖关系,需要进行image展平操作,将信息从快照复制到克隆image。
- 展平操作需要的时间由image的数据量决定
- 要删除拥有克隆子项的快照,必须先展平其子image
rbd flatten -p rbd-pool1 --image data-image6
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb7f03b7ffb6499db56ef0049de5d70d.png)
执行flatten后,查看image详细信息,已经不存在对快照的依赖关系,如上图所示。
删除原始快照
rbd snap unprotect --image data-image5 -p rbd-pool1 --snap snap1
rbd snap rm --image data-image5 -p rbd-pool1 --snap snap1
![在这里插入图片描述](https://img-blog.csdnimg.cn/e94826bb3dbc41c3afdbdbd4848cae32.png)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)