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

 

说明:先创建一个ceph集群,这个集群有3monitor节点、多个OSD节点,而后这个上面有个存储池,每一个存储中的对象都保留3个副本。这时若是发下一个写request则会通过以下步骤。工具

 

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

 

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上组合物理资源时的进行了多重映射。部署

 

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

 

客户想要建立一个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上的过程。cli

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

 

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

 

1-3 数据写操做

相关文章
相关标签/搜索