[转]ceph rbd到OSD的数据映射

[转自 From <https://my.oschina.net/u/2460844/blog/531686> ]

说明:

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

1. 客户端的使用

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

[转]ceph rbd到OSD的数据映射

      图1-1 client rbd设备的使用

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

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

 

2 . ceph上数据的组织

ceph上组合物理资源时的进行了多重映射。

 [转]ceph rbd到OSD的数据映射

                                图1-2 ceph数据的映射层次

 

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

 

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

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

 

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

 [转]ceph rbd到OSD的数据映射

                        图1-3 数据写操作

原文链接: https://www.cnblogs.com/yi-mu-xi/p/10369894.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    [转]ceph rbd到OSD的数据映射

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/403920

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月23日 上午9:28
下一篇 2023年4月23日 上午9:28

相关推荐