ceph如何修改 OSD CRUSH weight?

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

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

收起
参与3

返回月光满楼的回答

月光满楼月光满楼  数据库管理员 , 南车青岛四方

原因分析
我的 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
浏览3164

回答者

月光满楼
数据库管理员南车青岛四方
擅长领域: 存储灾备服务器

月光满楼 最近回答过的问题

回答状态

  • 发布时间:2020-01-14
  • 关注会员:2 人
  • 回答浏览:3164
  • X社区推广