searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Ceph数据读写寻址流程

2023-03-28 10:35:46
105
0

Ceph是一个开源分布式存储系统,有以下特点:多副本,强一致性;自定义故障域;自动隔离失效节点;数据自动恢复等。

Ceph存储逻辑有以下核心概念:

池(Pools):数据存储的逻辑容器;配置数据副本或者纠删编码;配置归置组数量;配置CRUSH规则。

对象:Ceph RADOS所看到的对象,也就是在Ceph中存储的基本单位。

归置组(Placement Group或PG):负责平衡数据到不同的OSDs;一个PG一般覆盖多个OSD(副本数);一个OSD一般服务多个PGs。

CRUSH(deterministic, decentralised placement algorithm):负责数据存储的hash规则;Mon节点负责维护CRUSH map;客户端通过获取CRUSH map直接与数据所在的OSD进行通信。

以下为一个池内各概念间的关系:

数据寻址基于以上概念及其关系实现:

1、文件到Object的映射。应用写入的数据通过librgw/librbd/libcephfs库拆解为一个又一个Object。

2、Object到PG的映射。PG(Placement Group)是Objects的逻辑集合。相同PG里的Object会被系统分发到相同的OSDs集合中。由Object的名称通过Hash算法得到的结果结合其他一些修正参数可以得到Object所对应的PG。

3、RADOS系统根据ClusterMap将PGs分配到不同故障域(一般情况下,故障域为机架rack,条件无法满足的情况下也可为服务器host)的相应的OSDs。这组OSDs正是PG中的Objects数据的存储位置。RADOS采用CRUSH算法实现了一种稳定、伪随机的hash算法。CRUSH实现了平衡的和与容量相关的数据分配策略。

第2和第3步的计算在librados库中实现。

完成数据寻址后,即可进行数据读写。对于读流程,librados直接从主OSD发送读请求,对于写流程,需要进行多副本的同步复制,流程如下:

1、Client向主OSD发送写请求。

2、主OSD接收到写请求后,同时向两个从OSD发送写副本的请求,并同时写入主OSD的本地存储中。

3、主OSD接收到两个从OSD发送写成功的ACK应答,同时确认自己写成功,就向客户端返回写成功的ACK应答。

在写操作的过程中,主OSD必须等待所有的从OSD返回正确应答,才能向客户端返回写操作成功的应答。

0条评论
0 / 1000