Ceph RDB 块存储

网友投稿 1146 2022-11-30

Ceph RDB 块存储

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.rootdefault.rgw.controldefault.rgw.metadefault.rgw.log[root@cephnode01 ~]# ceph osd pool create rbd 32 32pool 'rbd' created[root@cephnode01 ~]# rados lspools.rgw.rootdefault.rgw.controldefault.rgw.metadefault.rgw.logrbd现在给这个pool打上应用的名称,也就是打标签[root@cephnode01 ~]# ceph osd pool application enable rbd rbdenabled 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 lsimage01[root@cephnode01 ~]# rbd info image01rbd 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 image01rbd: sysfs write failedRBD 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 MOUNTPOINTsda 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/rbd0meta-data=/dev/rbd0 isize=512 agcount=17, agsize=162816 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0data = bsize=4096 blocks=2621440, imaxpct=25 = sunit=1024 swidth=1024 blksnaming =version 2 bsize=4096 ascii-ci=0 ftype=1log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=8 blks, lazy-count=1realtime =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 MOUNTPOINTsda 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 /mntumount /mnt

10、删除RBD块设备

rbd rm image01

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring中@Autowired与@Resource的区别详析
下一篇:Jenkins 流水线语法 03 全局变量
相关文章

 发表评论

暂时没有评论,来抢沙发吧~