rados块设备
创建rbd设备
rbd create ceph-client1-rbd1 --size 10240
默认情况下,RBD镜像会保存在ceph集群的rbd存储池中。可以使用-p参数指定其他的池。
rbd create ceph-client1-rbd2 --size 10240 -p test
可以使用-p参数指定test池将镜像保存在test池中,注意这里列出块设备和查看这个块设备的详细信息时也需要加-p指定test池。
列出rbd的镜像
[root@ceph01 ~]# rbd ls
ceph-client1-rbd1
[root@ceph01 ~]# rbd ls -p test
ceph-client1-rbd2
查看rbd镜像的详细信息
[root@ceph01 ~]# rbd --image ceph-client1-rbd2 info -p test
rbd image 'ceph-client1-rbd2':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.3b9da6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
[root@ceph01 ~]# rbd --image ceph-client1-rbd1 info
rbd image 'ceph-client1-rbd1':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.2f8ee6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
客户端挂载rbd设备
客户端的ip地址为192.168.240.200
加载rdb模块
modprobe rbd
安装ceph客户端
配置好ceph的yum源
安装epel源
yum -y install epel-release
安装ceph客户端
yum -y install ceph
如果是ceph-deploy部署的ceph集群也可以在ceph节点上执行如下命令安装客户端
ceph-deploy install 192.168.240.200
从ceph节点复制ceph.conf和ceph.client.admin.keyring到客户端的/etc/ceph/文件夹下
scp /etc/ceph/ceph* 192.168.140.200:/etc/ceph/
客户端映射rbd
rbd map --image ceph-client1-rbd1
输出
/dev/rbd0
或者也可以指定池的名称加镜像名称
rbd map --image rbd/ceph-client1-rbd1
查看映射对应的操作系统设备名
rbd showmapped
输出
id pool image snap device
0 rbd ceph-client1-rbd2 - /dev/rbd0
或者直接lsblk查看
[root@controller ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 19.8G 0 part
└─centos-root 253:0 0 19.8G 0 lvm /
sdb 8:16 0 20G 0 disk
└─sdb1 8:17 0 20G 0 part
sr0 11:0 1 4.3G 0 rom
rbd0 252:0 0 10G 0 disk
格式化该设备
mkfs.xfs /dev/rbd0
挂载该设备
mkdir /rbd
mount /dev/rbd0p1 /rbd
映射RBD报错
错误
[root@controller ~]# rbd map --image ceph-client1-rbd1
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (6) No such device or address
出现这种错误的原因是OS kernel不支持块设备镜像的一些特性,所以映射失败。查看该镜像支持了哪些特性:
[root@ceph-node1 ~]# rbd info ceph-client1-rbd1
rbd image 'ceph-client1-rbd1':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.121876b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
解决
方法1
直接diable这个rbd镜像的不支持的特性:
rbd feature disable ceph-client1-rbd1 exclusive-lock object-map fast-diff deep-flatten
方法二:
创建rbd镜像时就指明需要的特性,如:
rbd create ceph-client1-rbd1 --size 10240 --image-feature layering
方法三:
如果还想一劳永逸,那么就在执行创建rbd镜像命令的主机中,修改Ceph配置文件/etc/ceph/ceph.conf,在global section下,增加:
rbd_default_features = 1
注意:该方法需要先删除之前创建过的镜像,再创建该镜像。
调整ceph RBD大小
注意:格式化块设备的文件系统也支持调整容量才可以。
扩容rbd
rbd resize rbd/ceph-client1-rbd1 --size 20480
输出
Resizing image: 100% complete...done.
查看镜像容量
rbd info rbd/ceph-client1-rbd1
输出
rbd image 'ceph-client1-rbd1':
size 20480 MB in 5120 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.121876b8b4567
format: 2
features: layering
flags:
查看文件系统容量大小
[root@controller ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 20G 3.8G 17G 19% /
/dev/sda1 197M 167M 31M 85% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/rbd0 10G 33M 10G 1% /rbd
扩展文件系统容量
扩展文件系统容量,xfs文件系统支持在线调整扩容。
xfs_growfs /rbd
输出
meta-data=/dev/rbd0 isize=512 agcount=16, agsize=163840 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=1024 swidth=1024 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 5242880
确认
df -h
输出
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 20G 3.8G 17G 19% /
/dev/sda1 197M 167M 31M 85% /boot
tmpfs 378M 0 378M 0% /run/user/0
/dev/rbd0 20G 34M 20G 1% /rbd
ceph RBD快照
ceph完全支持快照,它是一个基于时间点的、只读的RBD镜像副本。可以通过创建快照并恢复其原始数据,保存ceph RBD镜像的状态。
为了测试ceph RBD的功能,往RBD上复制一些数据
查看rbd上的数据
[root@controller ~]# ll /rbd/
总用量 41912
-rw-r--r-- 1 root root 266 11月 2 12:47 admin-openrc
-rw------- 1 root root 1567 11月 2 12:47 anaconda-ks.cfg
-rw-r--r-- 1 root root 13287936 11月 2 12:47 cirros-0.3.4-x86_64-disk.img
-rw-r--r-- 1 root root 262 11月 2 12:47 demo-openrc
-rw-r--r-- 1 root root 41126400 11月 2 12:47 image.img
-rw-r--r-- 1 root root 2392 11月 2 12:48 init-openstack-pike-controller-manual.sh
-rw-r--r-- 1 root root 36132 11月 2 12:48 set-openstack-pike-controller.sh
-rw-r--r-- 1 root root 35891 11月 2 12:48 set-openstack-pike-controller.sh.bak
创建rbd镜像快照
语法
rbd snap create <pool-name>/<image-name>@<snap-name>
创建命令
rbd snap create ceph-client1-rbd1@snap1
查看rbd镜像快照
[root@controller ~]# rbd snap ls ceph-client1-rbd1
SNAPID NAME SIZE
4 snap1 20480 MB
测试快照
删除rbd中的文件
rm -rf /rbd/*
[root@controller ~]# ll /rbd/
总用量 0
卸载
umount /rbd/
恢复快照
语法
rbd snap rollback <pool-name>/<image-name>@<snap-name>
恢复命令
rbd snap rollback ceph-client1-rbd1@snap1
输出
Rolling back to snapshot: 100% complete...done.
注意:执行快照回滚前一定要先umount,(网上有教程说还需要umap,umap也可以,这里没有umap)否则回滚后再umount,mount会报错
mount: 文件系统类型错误、选项错误、/dev/rbd0p1 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看。
删除镜像快照
删除rbd的某个image的某个快照
语法
rbd snap rm <pool-name>/<image-name>@<snap-name>
命令
rbd snap rm ceph-client1-rbd1@snap1
删除rbd的某个image的所有快照
语法
rbd snap purge <pool-name>/<image-name>
命令
rbd snap purge ceph-client1-rbd1
复制ceph RBD
ceph存储集群可以从RBD的快照中创建写时复制(COW)副本。这就是ceph的快照分层。ceph的这个分层特性允许客户端创建ceph RBD的多个即时副本。这个特性对云平台和虚拟化平台非常有用,例如OpenStack、CloudStack和Qemu/KVM。这些平台通常以快照的形式保护含有OS/VM镜像的ceph RBD镜像,然后通过不断复制这个快照来创建新的虚拟机/实例。快照是只读的,但是COW副本则是完全可写的。COW复制的镜像与RBD是一样的。
他们都非常灵活,类似于RBD,也就是说,它们可写,可调整容量,可以创建新的快照,将来还可以复制。
RBD镜像的类型定义了它所支持的特性。在ceph中,有两种类型的RBD镜像:format-1和format-2。format-1和format-2类型的镜像都支持快照特性,然后COW特性只有format-2类型的RBD镜像支持。高版本的RBD镜像默认为format-2。
创建format-2类型的RBD镜像
rbd create ceph-client1-rbd2 --size 10240 --image-format 2
创建该RBD镜像的快照
rbd snap create rbd/ceph-client1-rbd2@snap_for_clone
将快照置于保护状态
rbd snap protect rbd/ceph-client1-rbd2@snap_for_clone
复制快照
语法
rbd clone <pool-name>/<parent-image>@<snap-name> <pool-name>/<child-image-name>
命令
rbd clone rbd/ceph-client1-rbd2@snap_for_clone test/ceph-client1-rbd3
查看新镜像信息
rbd info test/ceph-client1-rbd3
输出
rbd image 'ceph-client1-rbd3':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.3c9ca6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
parent: rbd/ceph-client1-rbd2@snap_for_clone
overlap: 10240 MB
扁平化该镜像
要让这个镜像不依赖他的父镜像,需要扁平化该镜像
rbd flatten test/ceph-client1-rbd3
输出
Image flatten: 100% complete...done.
查看扁平化后的镜像
可以看到他的父镜像/快照的名字消失,这就使得这个复制的镜像成了一个独立的镜像,即使删除父镜像也不会造成影响。
[root@controller ~]# rbd info test/ceph-client1-rbd3
rbd image 'ceph-client1-rbd3':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.3c9ca6b8b4567
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
删除父镜像
如果不需要父镜像的快照,可以删除它,删除之前解除保护状态
rbd snap unprotect rbd/ceph-client1-rbd2@snap_for_clone
删除
rbd snap rm rbd/ceph-client1-rbd2@snap_for_clone