Ceph 进阶系列(一):crush map文件里有些什么?

一、前言

  1. crush map 是什么? 请参考 Ceph 进阶系列(一):一些基本概念(1 of 2,偏client端 )
  2. 如何导出、查看一个Ceph集群的 crush map,请参考 Ceph 进阶系列(二):如何在指定的OSD 设备上创建 pool

二、分析crush map

下面是一个简单的Ceph集群里导出来的crush map文件,我们来分析一下它包含了哪些信息。

# begin crush map  //这些是配置变量,在选择存放副本位置时,选择算法策略会使它们
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

# devices          //osd 设备,一般我们会用一个HDD创建为一个OSD 设备。如果是NVME SSD可以多分区,每个分区上创建一个OSD 设备。
device 0 osd.0 class ssd
device 1 osd.1 class ssd
device 2 osd.2 class ssd
device 3 osd.3 class ssd

# types           //bucket 类型编号 及 类型名字,从上到下的顺序依次对应的范围会从小到大
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 region
type 10 root

# buckets                //bucket 定义区
host ubuntu {
        id -3           # do not change unnecessarily
        id -4 class ssd         # do not change unnecessarily
        # weight 0.029
        alg straw2
        hash 0  # rjenkins1
        item osd.0 weight 0.010
        item osd.1 weight 0.019
}
host ubuntu-sebre {
        id -5           # do not change unnecessarily
        id -6 class ssd         # do not change unnecessarily
        # weight 0.039
        alg straw2
        hash 0  # rjenkins1
        item osd.2 weight 0.019
        item osd.3 weight 0.019
}
root default {
        id -1           # do not change unnecessarily
        id -2 class ssd         # do not change unnecessarily
        # weight 0.068
        alg straw2
        hash 0  # rjenkins1
        item ubuntu weight 0.029
        item ubuntu-sebre weight 0.039
}

# rules          //rule 定义区
rule replicated_rule {
        id 0
        type replicated
        min_size 1
        max_size 10
        step take default
        step chooseleaf firstn 0 type host
        step emit
}

1. tunable 变量配置区

这些是配置变量,在选择存放副本位置时,选择算法策略会使它们。建议不调整下面这些参数:

tunable choose_local_tries 0                //已废弃
tunable choose_local_fallback_tries 0       //已废弃
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54

2. devices 区

osd 设备列表,一般我们会用一个HDD创建为一个OSD 设备。如果是NVME SSD可以多分区,每个分区上创建一个OSD 设备。如下,我在Ceph 集群里创建了 4 个OSD 设备。

device 0 osd.0 class ssd
device 1 osd.1 class ssd
device 2 osd.2 class ssd
device 3 osd.3 class ssd

3. types 区

所有如下的type统称为bucket。这个列表显示的是bucket 类型编号 及 类型名字,从上到下的顺序依次对应的范围会从小到大。

type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 region
type 10 root

实际拓扑图会是一个树结构root是根节点,叶子节点可以是root以外的任何类型,只要遵循大小顺序即可。例如,root->host->osd

Ceph 进阶系列(一):crush map文件里有些什么?_第1张图片

4. bucket 区

语法:

    [bucket-type] [bucket-name] {
        id [a unique negative numeric ID]
        weight [the relative capacity/capability of the item(s)]
        alg [the bucket type: uniform | list | tree | straw ]
        hash [the hash type: 0 by default]
        item [item-name] weight [weight]
    }

多个bucket描述就组成了一个bucket拓扑结构,如上面的拓扑图。

5. rules 区

语法:

    rule  {
        id 
        type [ replicated | erasure ]
        min_size 
        max_size 
        step take 
        step [choose|chooseleaf] [firstn|indep]  
        step emit

相关参数及具体含义如下:

Ceph 进阶系列(一):crush map文件里有些什么?_第2张图片

这里的 rule 可以单独应用到 指定的 pool 资源池,例如:ceph osd pool set crush_rule 。使用可参考:Ceph 进阶系列(二):如何在指定的OSD 设备上创建 pool

另外,补充说明一下 placement rules (前面语法rule 里step的三条语句)

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输出结果。
操作chooseleaf firstn{num}type{bucket-type}可以等同于两个操作:
a)choose firstn{num}type{bucket-type}
b)choose firstn 1 type osd


三、总结

所以说crush map里主要记录了OSD 设备列表,bucket拓扑结构 及 placement rule规则。

你可能感兴趣的:(存储,Ceph)