虚拟化容器,大数据,DBA,中间件,监控。

Ceph RDB 块存储

21 12月
作者:admin|分类:应用管理

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

 

浏览689 评论0
返回
目录
返回
首页
Ceph Dashboard 可视化 Ceph 初认与简介