ceph rbd(rados block device)配置与挂载

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

版权声明:本文为weixin_40548182原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。