RADOS 块设备 (RBD) 一一其前身是 Ceph 块设备Cep 客户端提供基于块的恃久化存储,通常作为一 个额外的磁盘使用,客户可以灵活地使用这个磁盘,可以作为裸设备使用 ,也可以格式化成文件系统,然后挂载它。RBD 利用 librbd 库并将块数据连续地存储在跨越多个 OSD 的条带状非储空间中 。RBD 由 Ceph Rados 层提供支持,因此每个块设备都分布多个 Ceph 节点上,从而提供了高性能和出色的可靠性, RBD 具有丰富的企业特性,如自动精简配置( thin proviioning) 、动态调整容量、快照、写时复制以及缓存。 协议作为主线内核驱动程序由 Linux 完全支持;它注支持多种虚拟化平台,如 KVM QEMU libvirt ,使得虚拟可以利用 Ceph 块设备 所有这些特点使 RBD 成为云平台(例如 OpenStack CloudStack)个理想选择 。
现在我们将学习如何创建一个 Ceph 块设备并使用它,在已经部署的集群上执行一下操作。

#ceph集群配置,任何一个节点都行
#(1)创建块存储pool池
[root@node140 osd]# ceph osd pool create rbd 128

#(2)查看已经创建的pools池
[root@node140 osd]# ceph osd lspools
1 rdb

#(3)初始化pool
[root@node140 osd]# rbd pool init rbd

#(4)ceph集群中创建remote_rbd71镜像 rbd_data1镜像
[root@node140 osd]# rbd create rbd_data1 --size 100G --image-feature layering
[root@node140 osd]# rbd create remote_rbd71 --size 100G --image-feature layering

#(5)查看rbd
[root@node140 /]# rbd ls -l
NAME SIZE PARENT FMT PROT LOCK
rbd_data1 10 GiB 2
remote_rbd71 100 GiB 2 excl

#(6)查看镜像详细信息
[root@node140 /]# rbd --image rbd_data1 info

#############ceph集群本地使用RBD##############

#(1)映射到本地,就可以翔本地硬盘一样使用了
[root@node140 osd]# rbd map rbd_data1
root@node140 osd]# rbd showmapped
id pool namespace image snap device
0 rbd rbd_data1 - /dev/rbd0

#(2)格式化,挂载使用
[root@node140 osd]# mkfs.xfs /dev/rbd0
[root@node140 /]# mount /dev/rbd0 /mnt/
[root@node140 /]# df -h
/dev/rbd0 10G 33M 10G 1% /mnt

#############远程主机使用RBD#################
注释:linux 内核从2.6.32版本开始支持ceph,对于客户端来说,要支持以本地化方式访问ceph设备快文件系统,建议使用2.6.34及以上版本的linux内核。
#(1)环境检查
[root@zabbix71 ~]# uname -r 查看内核版本
3.10.0-862.14.4.el7.x86_64
[root@zabbix71 ~]# modprobe rbd
检查是否支持rbd,module rbd not found表示不支持

#(2)客户端添加ceph集群主机host解析
[root@zabbix71 ~]# vim /etc/hosts
10.10.202.140 node140
10.10.202.141 node141
10.10.202.142 node142
10.10.202.143 node143

#(3)安装ceph 客户端,对应版本,我装的N版本
[root@zabbix71 ~]# yum -y install centos-release-ceph-nautilus.noarch
[root@zabbix71 ~]# yum -y install ceph-common

#(4)将ceph服务端的密钥拷贝到ceph客户端
PS:生产环境不要拷贝admin密钥,建立分权密钥,或者创建用户
[root@node140 /]# scp /etc/ceph/ceph.client.admin.keyring 10.10.202.71:/etc/ceph/
[root@node140 /]# scp /etc/ceph/ceph.conf 10.10.202.71:/etc/ceph/

#(5)客户端查看
[root@zabbix71 ~]# rbd --image remote_rbd71 info
rbd image 'remote_rbd71':
size 100 GiB in 25600 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: 148fdf5968ea2
block_name_prefix: rbd_data.148fdf5968ea2
format: 2
features: layering, exclusive-lock
op_features:
flags:
create_timestamp: Mon Aug 26 15:23:16 2019
access_timestamp: Mon Aug 26 15:23:16 2019
modify_timestamp: Mon Aug 26 15:23:16 2019

#(6)客户端映射,第一次提示报错,不支持的特性,执行下面那条命令
[root@zabbix71 ~]# rbd map rbd/remote_rbd71
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable remote_rbd1 object-map fast-diff deep-flatten".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
#(7)根据提示,关闭特性
[root@zabbix71 ~]# rbd feature disable remote_rbd1 object-map fast-diff deep-flatten

#(8)客户端重新map,rbd是pool名字,remote_rbd71是快存储名字
[root@zabbix71 ~]# rbd map rbd/remote_rbd71
/dev/rbd0

#(9)查看映射
[root@zabbix71 ~]# rbd showmapped
id pool namespace image snap device
0 rbd remote_rbd71 - /dev/rbd0

#(10)附加:取消映射操作
#[root@zabbix71 /]# rbd unmap /dev/rbd/rbd/remote_rbd71

#(11)查看fdisk -l 就可以看到硬盘
[root@zabbix71 ~]# fdisk -l
Disk /dev/rbd0: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

#(12)格式化,挂载使用,永久挂载
[root@zabbix71 ~]# mkfs.xfs /dev/rbd0
[root@zabbix71 ~]# mount /dev/rbd0 /mnt/
[root@zabbix71 ~]#vim /etc/fstab
/dev/rbd0 /mnt defaults 0 0