Ceph-CRUSH算法的具体实现

Ceph的工作原理及流程

首先介绍RADOS中最为核心的、基于计算的对象寻址机制,然后说明对象存取的工作流程,之后介绍RADOS集群维护的工作过程,最后结合Ceph的结构和原理对其技术优势加以回顾和剖析。     

 

寻址流程:

File:用户需要存储或访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file就是对应于应用中的“对象”,也就是用户直接操作的对象。

Object:当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object进行存储。

PG(Placement Group) 它可以看成是一致性哈希中的虚拟节点,维护了一部分数据并且是数据迁移和改变的最小单位。PG的用途是对object的存储进行组织映射。具体而言,一个PG负责组织若干个object,但一个object只能被映射到一个PG中,即PGobject”一对多”映射关系。同时一个PG会被映射到nOSD上,而每个OSD上都会承载大量的PG,即PGOSD”多对多”映射关系。在生产环境中n至少为3,

OSD:即object storage device在实践中至少应该是数十上百个才有助于Ceph系统的设计发挥其应有的优势。

failure domain:故障域

 

Ceph中的寻址至少要经历以下三次映射:

(1)File->object映射

这次映射的目的是将用户要操作的file,映射为RADOS能够处理的object。其映射十分简单,本质上就是按照object的最大sizefile进行切分,相当于RAID中的条带化过程。

这种切分好处有二:

1.让大小不限的file变成最大size一致、可以被RADOS高效管理的object.

2.让对单一file实施的串行处理变为对多个object实施的并行化处理。

每一次切分后产生的object将获得唯一的oid,即object id .其生产方式也是线性映射,极其简单

图中,ino是待操作file的元数据,可以简单理解为该file的唯一idono则是由该file切分产生的某个object的序号。而oid就是将这个序号简单连缀在该file id之后得到的。举例而言,如果一个idfilenamefile被切分成了三个object,则其object序号依次为012,而最终得到的oid就依次为filename0filename1filename2

这里隐含的问题是:ino的唯一性必须得到保证,否则后续映射无法正常进行。

 

(2)Object->PG映射

file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。过程很简单,计算公式是:

hash(oid) & mask -> pgid

计算由两步组成。首先是使用Ceph系统指定的一个静态哈希函数计算oid的哈希值,将oid映射成一个近似均匀分布的伪随机数值。然后将这个伪随机数值与mask按位相与,得到最终的PG序号(pgid)。根据RADOS的设计,给定PG的总数为m(m2的整数幂),则mask的值为m-1。因此,哈希值计算和按位与操作的整体结果事实上是从所有mPG中近似均匀地随机选择一个。基于这一机制,当有大量object和大量PG时,RADOS能够保证objectPG之间的近似均匀映射。又因为object是由file切分而来,大部分objectsize相同,因而,这一映射最终保证了,各个PG中存储的object的总数据量近似均匀。

只有在objectPG的数量较多是,这种伪随机关系的近似均匀性才能成立,Ceph的数据存储均匀性才能保证。一方面,object的最大size应该被合理配置,以使得同样数量的file能够被切分成更多的object;另一方面,Ceph也推荐PG总数量应该为OSD总数的数百倍,以保证有足够数量的PG可够映射。

 

(3)PG->OSD映射

第三次映射就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD

RADOS采用一个名为CRUSH的算法,将PGid带入其中,然后得到一组工nOSD。这nOSD即共同负责存储和维护一个PG中的所有object (n通常为3)。具体到每个OSD,则由其上运行的OSD deamon负责执行映射到本地的Object在本地文件系统中的存储、访问、元数据维护等操作。

和”Object->PG”映射中采用的哈希算法不同,这个CRUSH算法的结果不是绝对不变的,主要受到两个因素影响:1.当前系统状态(宕机) 2.存储策略配置(一般不变)

之所以在此次映射中使用CRUSH算法,而不是哈希算法,原因之一是CRUSH具有上述可配置特性,可以根据管理员的配置参数决定OSD的物理位置映射策略;另一方面是CRUSH具有特殊的”稳定性”,即当系统中加入新的OSD,导致系统规模增大时,大部分PGOSD之间的映射关系不会发生改变,只有少部分PG的映射关系会发生变化并引发数据迁移。这种可配置和稳定性Hash算法都不能提供。因此CRUSH算法也是Ceph的核心内容之一。

 

到此为止,Ceph通过三次映射,完成从fileobjectPGOSD整个映射过程。整个过程没有任何的全局查表操作需求。至于唯一的全局性数据结构cluster map,它的维护和操作都是轻量级的,不会对系统的可扩展性、性能等因素造成不良影响。

问:为什么要设计三层映射而不是一层?

答:如果将object直接映射到一组OSD上,如果这种算法是固定的哈希算法,则意味着一个object被固定映射在一组OSD上,当其中一个OSD损坏时,object也无法部署到新的OSD(因为映射函数不允许)

如果设计一个动态算法(例如CRUSH算法)来完成这一映射,结果将是各个OSD所处理的本地元数据暴增,由此带来的计算复杂度和维护工作量也是难以承受的。

综上所诉,引入PG的好处至少有二:一方面试下呢objectOSD之间的动态映射,从而为Ceph的可靠性、自动化等特性的实现留下了空间;另一方面也有效简化了数据的存储组织,大大降低了系统的维护管理开销。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值