分布式存储如何做数据恢复和 Rebalance?
简化版
数据恢复是在节点故障或副本不足时,从健康副本复制数据补齐;Rebalance 是在扩容、缩容或负载不均时重新分布数据。二者都要控制迁移速度,避免恢复流量影响线上读写。
详细版
数据恢复常见流程:
- 发现节点宕机或磁盘损坏。
- 标记该节点上的副本不可用。
- 选择健康副本作为源。
- 在其他节点创建新副本。
- 校验数据完整性。
- 更新元数据和路由。
Rebalance 常见于新增节点、删除节点、分片倾斜、容量不均。它会迁移一部分分片或数据块,让容量和负载更均衡。
关键点:
| 设计点 | 说明 |
|---|---|
| 限速 | 防止迁移打爆网络和磁盘 |
| 优先级 | 先恢复副本不足的高风险数据 |
| 校验 | 防止复制出错 |
| 可中断 | 迁移失败后能继续 |
| 观测 | 展示恢复进度和剩余风险 |
完整版教学
一、数据恢复和 Rebalance 的区别
数据恢复关注“数据安全”。节点坏了,某些数据副本数从 3 变成 2,系统要尽快补回 3 副本。
Rebalance 关注“分布均衡”。新增机器后,如果不迁移数据,新机器是空的,老机器仍然很忙;缩容或热点倾斜时,也需要重新分配数据。
两者都会搬数据,但目标不同:恢复优先保证副本数量,Rebalance 优先保证容量和负载均衡。
二、恢复流程为什么不能太激进
节点宕机后,系统可能有大量副本需要重建。如果所有恢复任务同时跑,网络和磁盘会被打满,正常业务读写延迟上升。
所以恢复任务要限速、排队、分级。
例如副本数只剩 1 的数据风险很高,应该优先恢复;副本数从 3 变 2 的数据可以稍后恢复。
三、数据源如何选择
恢复时要从健康副本复制数据。选择源节点时要考虑:
- 源副本是否最新。
- 源节点当前负载是否高。
- 网络拓扑是否跨机架或跨机房。
- 是否会让同一源节点承担太多恢复流量。
如果源副本本身落后,复制出去只会扩大错误。所以恢复前要校验版本、校验和或日志进度。
四、Rebalance 的常见触发场景
新增节点后,要把部分数据迁到新节点,否则新节点没有意义。
删除节点前,要先把该节点负责的数据迁走。
某些分片过热时,也可能把分片拆分或迁移到更强节点。
但 Rebalance 会改变数据位置,路由和元数据必须同步更新。迁移过程中,读写可能同时发生,需要处理双写、转发或短暂锁定。
五、迁移过程中的一致性
数据迁移时最怕一边搬,一边写。
常见做法有:
- 先复制全量数据。
- 记录迁移期间的增量写入。
- 追平增量。
- 切换路由。
- 清理旧副本。
有些系统会让旧节点在迁移期间转发请求到新节点,或者通过版本号防止旧数据覆盖新数据。
六、恢复和迁移的观测指标
生产环境里,恢复任务不能只在后台默默跑。至少要能看到副本不足的数据量、恢复队列长度、迁移吞吐、剩余时间、失败任务、每个节点的恢复流量和业务请求延迟。
如果恢复速度太慢,数据长时间少副本,风险会升高;如果恢复太快,业务请求会被恢复流量拖慢。好的系统会动态限速,在业务低峰提高恢复速度,在业务高峰降低迁移并发。
还要有危险水位告警,例如某些分片只剩一个副本、某台机器恢复失败次数过多、Rebalance 长时间无法完成。这些都比单纯看节点是否在线更有价值。
七、常见误区与追问
这道题要紧扣「数据恢复与 Rebalance」本身回答,不能把它混成泛泛的分布式存储套话。面试官通常会追问“写入怎么确认、失败怎么补、旧数据怎么防、成本在哪里”,所以回答要覆盖副本、分片、元数据、路由、复制协议、恢复迁移、热点和一致性模型。
| 回答层次 | 要讲清的内容 | 容易漏掉的边界 |
|---|---|---|
| 核心结论 | 数据恢复负责补齐故障副本,Rebalance 负责节点变化后重新分布数据,核心是控制速度、优先级和业务影响 | 不要停在名词解释 |
| 流程机制 | 发现副本缺失或节点变化 -> 计算目标副本布局 -> 选择源副本复制数据 -> 限速迁移和校验 -> 更新元数据路由 -> 清理旧副本 | 要说清触发点、状态变化、确认点和失败兜底 |
| 工程取舍 | 10TB 数据恢复如果不限速,会和在线读写争抢磁盘与网络,导致用户请求 P99 飙升 | 分布式存储用复杂的复制、分片和恢复机制换容量、吞吐和可用性,但会引入一致性、扩容和运维成本 |
数据恢复与 Rebalance 面试拆解:
1. 发现副本缺失或节点变化
2. 计算目标副本布局
3. 选择源副本复制数据
4. 限速迁移和校验
5. 更新元数据路由
6. 清理旧副本
记忆钩子:先给结论,再拆流程,再讲数字例子和失败边界;回答「数据恢复与 Rebalance」时要围绕题目问法收束,不要把相邻概念堆成一段没有重点的名词清单。
- 误区:恢复越快越好。 恢复会消耗网络、磁盘和 CPU,过快可能拖垮在线业务。
- 误区:Rebalance 只是搬数据。 还要更新元数据、路由、校验副本和处理失败重试。
- 误区:有三副本就不急着恢复。 副本数下降会降低容灾能力,再挂节点可能丢数据。
- 追问:恢复优先级怎么定? 优先恢复副本数不足、热点数据和高价值业务数据。
- 追问:如何避免迁移影响线上? 限速、分批、低峰执行、优先级队列和监控 P99。
- 追问:迁移后怎么确认正确? 校验 checksum、版本、行数或对象元数据,并更新路由。
八、加强记忆
数据恢复是“坏了补副本”,Rebalance 是“分布不均重新摊牌”。二者都要搬数据,但不能蛮干;要限速、校验、可中断、可观测,并在迁移期间处理好增量写入和路由切换。