语法说明
1 |
step choose firstn $n type bucket |
即: 选择 $n 个不同的bucket, 其中, $n = 0 意味着需要多少个副本就选择多少个bucket, $n = -1 意味着还需要选择多少副本就选择多少副本,返回结果是bucket,如果bucket 是osd自然就是叶子节点
1 |
step chooseleaf firstn $n type bucket |
即: 选择 $n 个不同的bucket,然后,再从每个bucket中任意选择一个osd,相当于:
1 2 |
step choose firstn $n type bucket step choose firstn 1 type osd |
这种情况下,显然chooseleaf比choose简单许多,表达的意思都是以bucket为故障域,在里面选择$n 个osd, 这也是比较常见的情况
情况二:
那么,如果我有多个row,但是期望将3份数据都存放在同一个row下,并且选择3个不同的rack存放呢?表达如下:
1 2 |
step choose firstn 1 type row step chooseleaf firstn 0 type rack |
等价于:
情况三:
假如我有5个row,但是仅仅希望存储的两个副本分别存放在row1和row2(我们知道,每个bucket都是有名字的),而不是随意选择两个,然后以rack为故障域来选择osd,该如何写呢?
这时候,仅仅使用choose和chooseleaf就搞不定了,还记得take语法吧,如下:
1 2 3 4 5 6 7 |
step take row1 step chooseleaf firstn 1 type rack step emit step take row2 step chooseleaf firstn -1 type rack step emit |
参考: