码迷,mamicode.com
首页 > 编程语言 > 详细

Ceph 知识摘录(Crush算法、PG/PGP)

时间:2018-08-25 11:33:32      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:写入   client   应该   优先   位置   分数   深度   根据   变化   

Crush算法
1、Crush的目的
      优化分配数据,高效的重组数据,灵活的约束对象副本放置,硬件故障时候最大化保证数据安全

2、流程
        Ceph 架构中,Ceph客户端是直接读写存放在OSD上的RADOS Object,因此,Ceph需要走完(Pool, Object) → (Pool, PG) → OSD set → OSD/Disk 完整的链路,才能让Ceph client知道目标数据 object的具体位置在哪里。
        数据写入时,文件被切分成object,object先映射到PG,再由PG映射到OSD set。每个pool有多个PG,每个object通过计算hash值并取模得到它所对应的PG。PG再映射到一组OSD(OSD个数由pool的副本数决定)。
       PG到OSD的映射的过程算法叫做Crush算法,这个算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。
       OSDMap管理当前Ceph中所有的OSD,OSDMap规定了Crush算法的一个范围,在这个范围中选择OSD结合。那么影响Crush算法结果的有两种因素,一个就是OSDMap的结构,另外一个就是Crush rule。

3、Crush rule介绍
Crush rule主要有3个重点:
  a.从OSDMap中的哪个节点开始查找,
  b.使用那个节点作为故障隔离域,
  c.定位副本的搜索模式(广度优先 or 深度优先)。

# ruleset

rule replicated_ruleset                             #规则集的命名,创建pool时可以指定rule集
{
  ruleset 0                                            #rules集的编号,顺序编即可
  type replicated                                  #定义pool类型为replicated(还有esurecode模式)
  min_size 1                                        #pool中最小指定的副本数量不能小1
  max_size 10                                     #pool中最大指定的副本数量不能大于10
  step take default                               #定义pg查找副本的入口点
  step chooseleaf firstn 0 type host      #选叶子节点、深度优先、隔离host
  step emit                                           #结束
}  

       PG选择osd的过程:首先要知道在rules中指明从OSDMap中哪个节点开始查找,入口点默认为default也就是root节点,然后隔离域为host节点(也就是同一个host下面不能选择两个子节点)。由default到3个host的选择过程,这里由default根据节点的bucket类型选择下一个子节点,由子节点再根据本身的类型继续选择,知道选择到host,然后在host下选择一个osd。


PG与PGP
       Ceph通过Crush算法,将若干个object映射到PG上,形成一个object与PG的逻辑集合,并以此作为object与OSD的中间层,将PG根据所在POOL的副本数,复制到多个OSD上。PG的用途是将某些东西进行逻辑归组,从而达到统一管理,提升效率的作用。  

       PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数

总结三点介绍
1、 PGP起到对PG进行归置的作用。
2、 PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同。
3、 当一个POOL的PG增大后,Ceph并不会开始进行rebalancing,只有在PGP的值增大后,PG才会开始迁移至其他的OSD上,并且开始rebalancing。


结论

  PG增加后,Ceph不会从原来的各个PG随机抽取部分数据到新的PG中,而是分裂某个PG,从而产生新的PG。原有的6个PG只有2个分裂,其它4个保持对象不变,这种方式可以有效的减少大量数据迁移导致的性能问题。(pg到osd的映射关系没有发生变化)

        当PGP变化时,Ceph才会开始真正的数据重平衡。(调整PGP不会引起PG内的对象的分裂,但是会引起PG的分布的变动,调整新增pg到osd的映射,保障数据在osd层面的均匀分布)

Ceph 知识摘录(Crush算法、PG/PGP)

标签:写入   client   应该   优先   位置   分数   深度   根据   变化   

原文地址:https://www.cnblogs.com/weichao01/p/9532794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!