Ceph RDB 块存储
1、RBD介绍
RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照(RDB的快照在恢复数据的时候就可以直接恢复快照了)、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。
- RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 类似,挂载的 RBD 就可以当磁盘用
- resizable:这个块可大可小;
- data striped:这个块在Ceph里面是被切割成若干小块来保存,不然 1PB 的块怎么存的下;
- thin-provisioned:精简置备,1PB 的集群是能创建无数 1TB 的块的。其实就是块的大小和在 Ceph中实际占用大小是没有关系的,刚创建出来的块是不占空间,今后用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就类似于 32G,而 2G 就相当于在 Ceph 中占用的空间 ;
- 块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。
- ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用典型的是云平台的块存储服务。
使用场景:
- 云平台(OpenStack做为云的存储后端提供镜像存储)
- K8s容器
- map成块设备直接使用
- ISCIS,安装Ceph客户端
2、Ceph RBD IO流程
(1)客户端创建一个pool,需要为这个pool指定pg的数量;
(2)创建pool/image rbd设备进行挂载;(RBD0里面存放着对象的数据)
(3)用户写入的数据进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号;
(4)将每个object通过pg进行副本位置的分配; (对象归于逻辑的pg组里面,pg要事先规划好)
(5)pg根据cursh算法会寻找3个osd,把这个object分别保存在这三个osd上; (pg最终会落在每个osd上面)
(6)osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统;
(7)object的存储就变成了存储一个文rbd0.object1.file; (如果一个文件很大,会切分成不同的小块,这些小块组合起来看到的才是rbd0里面的文件)
客户端写数据osd过程:
1. 采用的是librbd的形式,使用librbd创建一个块设备,向这个块设备中写入数据;
2. 在客户端本地同过调用librados接口,然后经过pool,rbd,object、pg进行层层映射,在PG这一层中,可以知道数据保存在哪3个OSD上,这3个OSD分为主从的关系;
3. 客户端与primay OSD建立SOCKET 通信,将要写入的数据传给primary OSD,由primary OSD再将数据发送给其他replica OSD数据节点;
客户端可以通过两种方式,一种是librbd和内核rbd来访问librados
3、RBD常用命令
| 命令 | 功能 |
| ------ | ------ |
| rbd create | 创建块设备映像 |
| rbd ls | 列出 rbd 存储池中的块设备 |
| rbd info | 查看块设备信息 |
| rbd diff | 可以统计 rbd 使用量 |
| rbd map | 映射块设备 |
| rbd showmapped | 查看已映射块设备 |
| rbd remove | 删除块设备 |
| rbd resize | 更改块设备的大小 |
4、RBD配置操作
1、创建rbd使用的pool(首先使用rbd要有一个单独的pool,这里要规划好pg的数量)
系统里面只有默认的这四个pool
[root@cephnode01 ~]# rados lspools
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
[root@cephnode01 ~]# ceph osd pool create rbd 32 32
pool 'rbd' created
[root@cephnode01 ~]# rados lspools
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
rbd
现在给这个pool打上应用的名称,也就是打标签
[root@cephnode01 ~]# ceph osd pool application enable rbd rbd
enabled application 'rbd' on pool 'rbd'
2、创建一个块设备 (和ceph在一个集群里面,那么都可以使用,随便挂载在哪个集群,前提是必须有这个rbd命令和在集群当作)
[root@cephnode01 ~]# rbd ls
[root@cephnode01 ~]#
[root@cephnode01 ~]# rbd create --size 10240 image01
3、查看块设备
[root@cephnode01 ~]# rbd ls
image01
[root@cephnode01 ~]# rbd info image01
rbd image 'image01':
size 10 GiB in 2560 objects
order 22 (4 MiB objects)
snapshot_count: 0
id: fab63fae30b
block_name_prefix: rbd_data.fab63fae30b
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
op_features:
flags:
create_timestamp: Mon May 10 14:54:22 2021
access_timestamp: Mon May 10 14:54:22 2021
modify_timestamp: Mon May 10 14:54:22 2021
大小10G可以存放2560个对象
4、将块设备映射到系统内核(映射到本地,那么看到的就和本地的盘一样了)
[root@cephnode01 ~]# rbd map image01
rbd: sysfs write failed
RBD image feature set mismatch. Try disabling features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
5、禁用当前系统内核不支持的feature
[root@cephnode01 ~]# rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
6、再次映射
[root@cephnode01 ~]# rbd map image01
/dev/rbd0
[root@cephnode01 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 12G 0 disk
?..sda1 8:1 0 512M 0 part /boot
?..sda2 8:2 0 512M 0 part [SWAP]
?..sda3 8:3 0 11G 0 part /
sdb 8:16 0 5G 0 disk
?..ceph--ce1a9585--bc3b--4f87--a2b2--cc38b0e16ef5-osd--block--6615e13a--a60b--43d0--99f1--eefe64114dd8
253:0 0 5G 0 lvm
sr0 11:0 1 1024M 0 rom
rbd0 252:0 0 10G 0 disk
7、格式化块设备镜像,格式化完之后盘才可以使用
[root@cephnode01 ~]# mkfs.xfs /dev/rbd0
meta-data=/dev/rbd0 isize=512 agcount=17, agsize=162816 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=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 log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
8、mount到本地
[root@cephnode01 ~]# mount /dev/rbd0 /mnt
[root@cephnode01 mnt]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 12G 0 disk
?..sda1 8:1 0 512M 0 part /boot
?..sda2 8:2 0 512M 0 part [SWAP]
?..sda3 8:3 0 11G 0 part /
sdb 8:16 0 5G 0 disk
?..ceph--ce1a9585--bc3b--4f87--a2b2--cc38b0e16ef5-osd--block--6615e13a--a60b--43d0--99f1--eefe64114dd8
253:0 0 5G 0 lvm
sr0 11:0 1 1024M 0 rom
rbd0 252:0 0 10G 0 disk /mnt
umount /mnt
10、删除RBD块设备
rbd rm image01
目录 返回
首页