ceph如何修改 OSD CRUSH weight?

部署完成后,集群处于 PG Degraded 状态,经查 ceph health detail,发现 PG 的 acting OSD 只有 [0],而不是两个。查 osd tree,osd 日志等,看不出明显问题。

参与3

1同行回答

月光满楼月光满楼数据库管理员南车青岛四方
原因分析我的 Ceph 集群的 OSD 的 weight 都是 0!![root@ceph1]# /etc/ceph# ceph osd tree # id weight type name up/down reweight -1 0 root default -2 0 host ceph1 0 0 osd.0 up 1 2 ...显示全部

原因分析
我的 Ceph 集群的 OSD 的 weight 都是 0!!

[root@ceph1]# /etc/ceph# ceph osd tree
# id    weight  type name       up/down reweight
-1      0       root default
-2      0               host ceph1
0       0                       osd.0   up      1
2       0                       osd.2   up      1
-3      0               host ceph2
1       0                       osd.1   up      1
3       0                       osd.3   up      1

从上面 ceph osd tree 的结果里面可以看到这里有两个weight:weight 和 reweight。这篇文章 有详细的分析。简单来说:

weight:即 osd crush weight,表示设备(device) 容量的相对值,比如如果1TB对应1.00,那么 500MB 对应 0.50。bucket weight 是所有 item weight 之和,item weight 的变化会影响 bucket weight 的变化,也就是 osd.X 会影响host。 对于 straw bucket,如果 item weight 为0,则 item straw 也为0,当CRUSH 算法在 bucket 选择 item 时,也就不太可能选中该 item。

reweight:取值为0~1。osd reweight 并不会影响 host。当 osd 被踢出集群(out)时,osd weight 被设置0,加入集群时,设置为1。它会参与 CRUSH 创建 PG 的过程。CRUSH在选择 OSD 时,如果发现 weight 为0,就跳过该 OSD。

因此,问题的症结就在于 osd crush weight 为0。至于为什么会这样,以及该值对 PG 分配的影响,有待进一步查明。

解决办法:修改 osd crush weight

ceph osd crush reweight osd.0 1
ceph osd crush reweight osd.1 1
ceph osd crush reweight osd.2 1
ceph osd crush reweight osd.3 1

修改后,集群就回到了 HEALTH_OK 状态。

注意:修改 OSD 的 crush weight 会带来部分 PG 之间的数据移动,这可能会影响集群的性能,因此在生产环境中使用要小心。你可以参考 这篇文章 来看数据移动的情况。

收起
汽车 · 2020-01-14
浏览3217

提问者

老赵
老赵1715
系统工程师某保险
擅长领域: 存储灾备网络

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-01-13
  • 关注会员:2 人
  • 问题浏览:4409
  • 最近回答:2020-01-14
  • X社区推广