知识卡片

故障恢复为何局限在同一故障域内

专业/工作 · 237.c.1

内容

一个 OSD 出现故障时,它的权重值本身并不会立刻被清零或更新——被清零的只是该 OSD 的状态标记,它所在的上层[[ClusterMap的树状故障域]](比如所属 Host)权重维持不变,CRUSH 计算 PG 到故障域这一层级的映射结果也就不会改变,因此不会触发跨故障域的全局重新平衡(Rebalance)。结果是,故障 OSD 上的 PG 只会被转移到同一个故障域内的其他健康 OSD 上,而不会波及域外的存储节点。发散:这本质是把”权重不变”当作触发重平衡的开关——只要上层聚合权重没变,CRUSH 就认为拓扑没变,恢复动作被天然限定在故障发生的那个局部范围,这也是为什么扩大故障域(把三副本分布到更大范围的机架/机房)能顺带缩短恢复时间:同一故障域内可参与恢复的健康 OSD 更多。

参考来源

《Ceph分布式存储实战》第10章《自定义CRUSH》