再平衡在做什么
集群认为「数据应该在哪些节点上」有一套目标分布,当节点增减、权重调整或故障域变化时,实际分布与目标分布出现偏差,系统就会把数据搬过去,这个过程叫再平衡。它包含两类动作:为新增节点补齐数据的回填,以及为降级副本重建的恢复,两者都会抢占带宽与磁盘 IO。
基本信息
| 适用平台 | Ceph、HDFS、MinIO 等分布式存储 |
|---|---|
| 触发条件 | 扩缩容、权重变更、节点故障恢复、PG 数调整 |
| 速度控制 | 限速队列、暂停开关(如 noout、nobackfill、norecover) |
| 观察命令 | 集群健康、数据迁移量、单节点带宽与 IO |
典型使用场景
- 新增节点上线:控制回填速度避免白天业务高峰被拖慢
- 故障节点回归:先确认数据是否落后再决定是否让它参与回填
- 批量变更前的容量规划:预估迁移量、带宽占用与完成时间
- 性能异常排查:区分是业务流量还是后台迁移在消耗 IO
速度与优先级控制
速度与优先级控制
ceph osd set nobackfill # 暂停回填,保留恢复
ceph osd set norecover # 暂停恢复,业务优先时使用
ceph osd unset nobackfill # 业务低谷放开,让迁移继续
ceph osd dump | grep -E 'backfill|recover' # 观察限速与状态位
ceph -s # 关注迁移中的对象量与速率两类迁移的差别
| 类型 | 触发场景 | 关注点 |
|---|---|---|
| 回填 backfill | 新 OSD 上线或权重变化 | 带宽占用大,可延迟做 |
| 恢复 recovery | 副本降级后重建 | 直接影响数据可靠性,优先级更高 |
| 重均衡 | PG 重映射后按目标分布搬移 | 批量变更时需分批执行 |
把回填安排在业务低谷是常规操作,但暂停不能太久:降级副本长期不恢复,集群的抗故障余量一直在低水位。
在迁移尚未完成时又发起新的拓扑变更,会让多轮迁移叠加,IO 压力与被再次搬移的数据量成倍增加。
迁移窗口安排
- 把迁移安排在业务低谷并提前通知业务方,避免高峰期抢 IO
- 按优先级先恢复降级副本,再为新增节点做回填
- 限制单节点并发与带宽上限,防止前端链路被打满
- 分批引入新节点,等上一批收敛再动下一批
- 迁移完成后做一次容量与性能复测,确认达到预期
判断再平衡是否收敛看的是分布偏差是否回到阈值内,而不是迁移速率降到零:速率很低也可能只是被限速压住了。