zoukankan      html  css  js  c++  java
  • CRUSH数据分布算法

     

    placement rule 

    Cluster Map反映了存储系统层级的物理拓扑结构,placement Rules决定了了一个PG的对象副本如何选择的规则,通过这些自己设定的规则,用户可以设定副本在集群中的分布,其定义格式如下:

    rule <rulename> {
        ruleset <ruleset>
        type [replicated|erasure]
        min_size <min-size>
        max_size <max-size>
        step take <bucket-name>
        step select [choose|chooseleaf] [firstn|indep] <num> type <bucket-type>
        step emit
    }
    • ruleset : 相当于rule的id
    • type : 存储池pool的类型,是副本还是纠删码
    • min_size : 如果副本数小于这个数值,就不会应用这条rule
    • max_size : 如果副本数大于这个数值,就不会应用这条rule
    • step take : crush规则的入口,一般是类型为root的bucket
    • step sleect : 分为choose 和chooseleaf两种, num 代表选择的数量,bucket-type是预期的bucket类型
    • step emit : 代表从take开始到这个操作结束。

    这里着重讲解下rule的step select,需要注意的是select开始的起点,是上一个step的输出

    select 分为两种

    • choose : choose 在选择到预期类型的bucket后就到此结束,进行下一个select操作
    • chooseleaf : chooseleaf 在选择到预期的bucket后会继续递归选到osd
    • firstn 和indep : 都是深度优先遍历算法,主要区别在于如果选择的num为4,如果无法选够4个结果的时候 firstn 会返回[1,2,4] 这种结果,而indep会返回[1,2,CRUSH_ITEM_NONE,4], 一半情况下都是使用firstn

    参考资料

    1. 深入理解ceph crush(1)—-理解crush map文件

    2. ceph若干关键问题

    3. ceph的CRUSH算法的源码分析.md

    4. 014 Ceph管理和自定义CRUSHMAP

    5. Ceph源码解析:CRUSH算法

    6.ceph的CRUSH算法的源码分析

  • 相关阅读:
    django ajax使用
    vim--分屏快捷键
    django csrf
    django mysql使用
    官方文档地址
    图解http 学习
    Terms
    Data Center Group
    Misc
    FTDI CDM Drivers 2.06.00
  • 原文地址:https://www.cnblogs.com/sunbines/p/14778728.html
Copyright © 2011-2022 走看看