首页/数据/NoSQL 速查/多机房部署模式的取舍
选型与架构50 条

多机房部署模式的取舍

多机房方案按 RPO/RTO 与成本选择:主备(异步复制,站点级故障时切换)、同城双活(低延迟链路加仲裁)、单元化/多活(数据按单元切分,避免跨站写冲突)。一致性协议成员跨机房时,写入延迟取决于慢机房,机房布局要服从仲裁需求。

NoSQL 速查数据更新于 2026-10-13

多机房的三种模式

多机房部署形态按 RPO 与 RTO 划分:主备模式异步复制,站点故障时切换,代价是可能丢一部分数据;同城双活靠低延迟链路加仲裁节点,能做到接近零丢失;单元化多活把数据按单元切分,故障影响面最小但改造量最大。共识类存储跨机房部署时,写入延迟取决于成员分布与多数派落点。

模式对照

模式RPO / RTO 倾向关键约束
主备(异步复制)RPO 大于 0,RTO 分钟级切换脚本与数据追赶必须演练
同城双活RPO 接近 0,RTO 秒级需要仲裁节点与脑裂防护
单元化多活单元内自洽,故障影响面小跨单元聚合与路由改造成本高

基本信息

多数派落点副本跨机房时,写确认需要跨机房往返,延迟由链路决定
副本分布两机房平均分布时任一机房故障都可能选不出多数派
读偏好可就近读从节点以降低延迟,但要接受读到的可能是旧数据
异地复制搜索引擎类可用跨集群复制做异地副本,写入仍在主集群
切换演练切换时长与数据丢失量必须实测,而非估算

典型使用场景

  • 同城容灾:两个机房加一个仲裁点,避免单机房故障导致整体不可用
  • 异地备份与只读副本:主集群写入,异地提供查询与恢复能力
  • 单元化改造:用户按维度分单元,跨单元的请求尽量减少
  • 故障演练:定期模拟机房级故障,验证切换流程与耗时
  • 容量规划:多数派落点与专线带宽一起决定集群规模上限

机房感知部署(MongoDB 分区示意)

机房感知部署(MongoDB 分区示意)
// 给分片打机房标签,并把租户的数据范围固定到机房
sh.addShardToZone("shardA", "dc-east")
sh.updateZoneKeyRange("app.users", { region: "east" }, { region: "east~" }, "dc-east")

// 读偏好与写关注一起决定延迟与一致性
// 连接串:readPreference=nearest
// 写入:writeConcern { w: "majority" } —— 跨机房部署时先确认多数派落点与链路延迟
先量化可接受的 RPO 与 RTO 再选模式:多数业务不需要跨城强一致,但必须能说清故障时丢多少数据、多久恢复。
副本成员平均分布在两个机房时,任一机房整体故障都可能无法形成多数派,仲裁点必须放在第三个故障域。

易错点

  • 副本平分在两个机房且无第三仲裁点:单机房故障时选不出主节点,集群整体不可写
  • 多活写入不做单元切分:跨站同时修改同一记录需要冲突合并,业务复杂度迅速上升
  • 假设切换就是改个地址:缺少 DNS 或代理层配合、连接池未重建时,切换后大量连接指向旧机房
  • 从未演练机房级故障:真实的切换耗时与数据丢失量在事故当天才第一次被知道

数据来源与参考

  • MongoDB Manual: Deploy a replica set across data centers
  • Elasticsearch Guide: Cross-cluster replication
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌