在ceph 集群中建立 pool 以后,集群中的 pgs 一致处于 not active 的状态。这个问题和CRUSH算法中的分配规则有关。
解决方法,修改CRUSHMap。
导出 crushmap, 执行
1 | ceph osd getcrushmap -o crushmap |
反编译
1 | crushtool -d crushmap crushmap.txt |
查看内容,如下:
1 | # begin crush map |
可以看到其中有一条规则, “step chooseleaf firstn 0 type host”,
将 host 修改为 osd
修改为 step chooseleaf firstn 0 type osd
编译
1 | crushtool -c crushmap.txt -o crushmap-new |
加载新规则
1 | ceph osd setcrushmap -i crushmap-new |
再查看集群状态,可以看到 pgs 已经成为 active
1 | cluster: |
问题解决。