Skip to content

部署模式对比

MongoDB 支持三种部署模式,适用于不同规模和可用性要求的场景。

概述

模式节点数高可用水平扩展适用场景
单节点1本地开发、测试
副本集≥ 3生产环境、读扩展
分片集群≥ 9大规模生产、海量数据

单节点(Standalone)

┌──────────┐
│  mongod  │
│  27017   │
└──────────┘

优点

  • 部署最简单,一条命令启动
  • 资源占用最少,适合本地开发和 CI
  • 管理零成本

缺点

  • 无高可用,宕机即不可用
  • 无读扩展,所有读写集中一个节点
  • 数据丢失风险,无冗余备份

适用:本地开发、单元测试、CI 流水线。

副本集(Replica Set)

┌──────────┐  异步复制  ┌──────────┐
│ Primary  │───────────▶│Secondary │
│ (写+读)   │            │  (读)     │
└──────────┘            └──────────┘
     │                       │
     └───────────┬───────────┘

          ┌──────────┐
          │Secondary │
          │  (读)     │
          └──────────┘

优点

  • 自动故障转移,Primary 宕机后 10 秒内选举新 Primary
  • 数据冗余,每个节点持有完整数据副本
  • 读写分离,Secondary 可分担读请求
  • oplog 支持数据恢复和时间点回溯

缺点

  • 至少 3 节点,资源成本是单节点的 3 倍
  • 写操作仍集中在 Primary,无法水平扩展写入
  • 异步复制存在数据延迟窗口(默认由 writeConcern 控制)
  • 数据全量复制,无分片能力,单 Shard 存储有上限

适用:绝大多数生产场景,中小规模应用,要求高可用但不需水平扩展。

分片集群(Sharded Cluster)

       ┌──────────┐
       │  mongos  │  路由
       └──────────┘

   ┌────────┼────────┐
   │        │        │
┌──────┐ ┌──────┐ ┌──────┐
│Shard1│ │Shard2│ │Shard3│  数据分片(各为副本集)
│  RS  │ │  RS  │ │  RS  │
└──────┘ └──────┘ └──────┘
   │        │        │
   └────────┼────────┘

   ┌────────┼────────┐
   │ Config Server  │  元数据(副本集)
   │      RS        │
   └───────────────┘

优点

  • 水平写扩展,写入可分散到多个 Shard
  • 海量数据存储,突破单机磁盘限制
  • 数据分片后查询可并行执行(Scatter-Gather)
  • 可按地域分区(Zone Sharding),数据就近存储
  • 每个 Shard 本身是副本集,兼具高可用

缺点

  • 架构复杂,最少 9 个 mongod 进程(3 Config + 2×3 Shard) + mongos
  • 运维成本高,需要监控 Config Server、mongos、各 Shard
  • 分片键选择不可逆,选错会导致数据倾斜和热点
  • 跨 Shard 查询性能差,尽量让查询命中单个 Shard
  • 某些操作受限(如 $lookup 跨 Shard 不支持)

适用:大规模应用,TB/PB 级数据,高写入吞吐需求,全球部署。

选型决策

是否需要高可用?
├── 否 → 单节点
└── 是
    └── 数据量/写入量是否会超单机能力?
        ├── 否 → 副本集
        └── 是 → 分片集群
条件推荐模式
本地开发、测试单节点
生产环境,数据量 < 1TB副本集
生产环境,数据量 > 1TB 或写 QPS > 单机分片集群
需要跨地域部署分片集群 + Zone Sharding

参考