ceph的数据存储之路(2) ----- rbd到osd的数据映射

 

说明:先建立一个ceph集群,这个集群有3monitor节点、多个OSD节点,然后这个上面有个存储池,每个存储中的对象都保留3个副本。这时如果发下一个写request则会经过如下步骤。

 

A . 客户端的使用,在客户端使用rbd设备时,一般有两种方法。

 

180320_nNSJ_2460844.png

1-1 client rbd设备的使用

 

第一种 kernel rbd。就是创建了rbd设备后,把rbd设备map到内核中,形成一个虚拟的块设备,这时这个块设备同其他通用块设备一样,一般的设备文件为/dev/rbd0,后续直接使用这个块设备文件就可以了,可以把/dev/rbd0格式化后mount到某个目录,也可以直接作为裸设备使用。这时对rbd设备的操作都通过kernel rbd操作方法进行的。

 

第二种是librbd方式。就是创建了rbd设备后,这时可以使用librbdlibrados库进行访问管理块设备。这种方式不会map到内核,直接调用librbd提供的接口,可以实现对rbd设备的访问和管理,但是不会在客户端产生块设备文件。

 

B . ceph上数据的组织。ceph上组合物理资源时的进行了多重映射。

 

180430_9Sz8_2460844.png

1-2 ceph数据的映射层次

 

客户想要创建一个rbd设备前,必须创建 一个pool,需要为这个pool指定pg的数量,在一个pool中的pg数量是不一定的,同时这个pool中要指明保存数据的副本数量3个副本。再在这个pool中创建一个rbd设备rbd0,那么这个rbd0都会保存三份,在创建rbd0时必须指定rbdsize,对于这个rbd0的任何操作不能超过这个size。之后会将这个块设备进行切块,每个块的大小默认为4M,并且每个块都有一个名字,名字就是object+序号。将每个object通过pg进行副本位置的分配(pg map 到osd的过程会在下一节讲述),pg会寻找3osd,把这个object分别保存在这三个osd上。osd上实际是把底层的disk进行了格式化操作,一般部署工具会将它格式化为xfs文件系统。最后对于object的存储就变成了存储一个文件rbd0.object1.file

 

c.客户端写数据到osd上的过程。

假设这次采用的是librbd的形式,使用librbd创建一个块设备,这时向这个块设备中写入数据,在客户端本地同过调用librados接口,然后经过poolrbdobjectpg进行层层映射,PG这一层中,可以知道数据保存在哪3OSD上,这3OSD分为主从的关系,也就是一个primary OSD,两个replica OSD。客户端与primay OSD建立SOCKET 通信,将要写入的数据传给primary OSD,由primary OSD再将数据发送给其他replica OSD数据节点。

 

总结剖析这个写数据过程,第一部分客户端处理对rbd读写的请求,经过librbdlibrados库可知道数据保存在哪些OSD上,客户端与primary OSD建立通信,传输请求,再由primary OSD 发送给其他replica OSD

 

180525_dkRe_2460844.png

1-3 数据写操作

转载于:https://my.oschina.net/u/2460844/blog/531686

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值