ceph crushmap choose规则分析

1. Placement Rules

1.1 模拟代码

tack(a)
choose
    choose firstn {num} type {bucket-type}
    chooseleaf firstn {num} type {bucket-type}
        if {num} == 0, choose pool-num-replicas buckets (all available).
        if {num} > 0 && < pool-num-replicas, choose that many buckets.
        if {num} < 0, it means pool-num-replicas - {num}.
emit

1.2 Placement Rules的执行流程

  1. take操作选择一个bucket, 一般是root类型的bucket.
  2. choose操作有不同的选择方式,其输入都是上一步的输出:
    a. choose firstn深度优先选择出num个类型为bucket-type个的子bucket.
    b. chooseleaf先选择出num个类型为bucket-type个子bucket,然后递归到叶节点,选择一个OSD设备:
    • 如果num为0, num就为pool设置的副本数。
    • 如果num大于0, 小于pool的副本数,那么久选择出num个。
    • 如果num小于0,就选择出pool的副本数减去num的绝对值。
  3. emit输出结果

2. 实战模拟演练

2.1 演练列表

ruleset_idchoose numchooseleaf_num结论
0firstn 0 type podfirstn 0 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
1firstn 1 type podfirstn 0 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
2firstn 2 type podfirstn 0 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
3firstn 3 type podfirstn 0 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
4firstn 4 type podfirstn 0 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
5firstn 1 type podfirstn 1 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
6firstn 1 type podfirstn 2 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
7firstn 1 type podfirstn 3 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
8firstn 1 type podfirstn 4 type rackpg三个副本分布:
- 同一个pod下
- 不同rack下
9firstn 0 type podpg三个副本分布:
- 不同pod下
10firstn 0 type rackpg三个副本分布:
- 不同rack下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值