分布式存储的数据放置策略如何设计?
简化版
数据放置要同时满足副本数、故障域隔离、容量与负载均衡、介质/地域约束和迁移成本。常见做法先过滤不合格节点,再按容量水位、已有副本、机架/可用区和负载打分选择;不能只选“当前最空”的机器,否则容易把副本放进同一故障域并引发迁移震荡。
详细版
三副本通常要求落在三台不同主机,最好跨机架或可用区。若业务要求单 AZ 故障仍可用,则法定多数不能全部集中在一个 AZ。
放置分两步:硬约束过滤,如节点健康、磁盘足够、标签匹配、不能重复主机;软约束打分,如剩余容量、QPS、Leader 数、网络距离和迁移字节。
例如三 AZ 各两台节点,副本因子 3,可优先每 AZ 一个。若某 AZ 容量不足,系统应明确拒绝、降级约束或申请扩容,不能静默把三个副本都塞到另两区却仍宣称容忍任一区故障。
Rebalance 需要最小移动原则、冷却期和限速。理想均衡不是持续搬迁,目标应是落在可接受区间并保留故障恢复余量。
完整版教学
一、放置策略在优化什么
放置器决定每个 shard/object 的副本在哪些节点。它同时影响耐久性、故障可用性、访问延迟和成本。只优化容量可能把副本集中在同一电源域,只优化就近又可能失去地域容灾。
二、硬约束与软目标
硬约束违反就不能放置,软目标用于候选排序。把二者分开可避免打分高的节点绕过安全规则。
| 类型 | 示例 | 处理方式 |
|---|---|---|
| 硬约束 | 不同主机、磁盘有余量 | 不满足直接过滤 |
| 故障域 | 至少跨 3 个 AZ | 按业务等级强制 |
| 介质标签 | SSD、加密盘 | 精确匹配 |
| 软目标 | 容量、QPS、Leader 数 | 加权打分 |
三、故障域如何推导
容忍一台主机故障只需副本分主机;容忍机架故障要跨机架;容忍 AZ 故障则要确保剩余区域仍满足读写仲裁。五副本跨三 AZ 的 2-2-1 布局,在丢失有两个副本的 AZ 后还剩 3 个,可维持多数。
故障目标 -> 副本数 -> quorum -> 区域分布 -> 验证任一故障后剩余 quorum
网络分区方向也重要。三副本 2-1 跨两地域时,拥有 2 副本的地域失联会让另一边不可写,这可能符合安全性但不符合业务期望。
四、容量与负载打分
节点剩余容量多不代表适合放置。还要看磁盘 IOPS、网络、CPU、现有热点分片和 Leader 数。可使用归一化分数,但任何权重都应以压测和线上反馈校准。
假设 A 空闲 4 TB 但磁盘队列 90%,B 空闲 3 TB 且队列 20%,新写热分片通常应选 B。对于 500 GB 副本,还要预留快照安装和 Compaction 临时空间,不能把 500 GB 当作唯一需求。
五、异构节点和数据温度
SSD 节点承载热层,HDD 或对象存储承载冷层。放置策略通过标签和存储类匹配,并在温度变化时迁移。副本可以采用一份低延迟主副本加两份容量型副本,但读写协议必须知道不同副本能力。
多租户还要做反亲和,避免同一大租户占满单节点;合规数据可能要求不出地域。所有约束应版本化并可审计,否则运维无法解释某副本为何在某处。
六、Rebalance 如何避免震荡
节点加入后若追求瞬间绝对均衡,会产生海量网络和磁盘流量。应计算移动收益与成本,只迁移超过偏差阈值的副本,并设置并发、带宽、冷却时间和前台延迟反馈。
监控包括副本数违规、故障域违规、容量偏差、Leader 偏差、不可放置 shard、迁移 backlog/ETA 和迁移对 P99 的影响。故障恢复任务通常高于普通均衡,但也不能打满集群。
记忆钩子:先用硬约束保证“放得安全”,再用软打分做到“放得均衡”,最后用限速保证“搬得稳”。
七、常见误区与追问
- 误区:三副本就能容忍任意机房故障。 是否能容忍取决于副本拓扑和 quorum 分布。
- 误区:永远选择最空节点即可。 还要考虑 IOPS、网络、热点和故障域。
- 误区:均衡度越接近零越好。 过度追求会造成迁移震荡,应接受安全区间。
- 追问:约束无法同时满足怎么办? 显式失败或按预先批准的等级降级,并告警记录。
- 追问:新节点为何不能立即灌满? 大量迁移会影响前台并减少回退空间。
- 追问:如何验证容灾布局? 枚举目标故障域失效,检查剩余副本是否满足 quorum 和容量。
八、加强记忆
放置策略按“过滤—打分—迁移”理解:健康、容量、标签和故障域是安全门槛;水位、负载和距离决定候选优先级;Rebalance 用最小移动、限速和冷却让布局逐步收敛。副本数量只是输入,故障后的仲裁能力才是最终验证。