三节点psa架构(1主+1从+1仲裁)是mongodb副本集高可用集群最经济可靠的起点,满足多数选举要求、容错1台宕机,且兼顾资源效率与自动故障转移能力。

搭建 MongoDB 副本集高可用集群,核心是让多个节点协同工作、自动选主、故障不中断。它不是“多装几台 MongoDB 就行”,而是需要合理规划角色、网络、安全和初始化流程。下面分四块讲清楚关键动作。
明确节点角色与数量搭配
生产环境推荐三节点起步(1 主 + 1 从 + 1 仲裁),也叫 PSA 架构。它用最低成本满足选举多数(majority)要求:3 个投票节点中只要 2 个在线,就能选出主节点,容错 1 台宕机。
- 主节点(Primary):唯一接收写请求,需配置较高资源(4 核 / 16GB 内存 / NVMe SSD)
- 从节点(Secondary):同步主节点 oplog,可承担读流量;建议与主节点同规格或略低
- 仲裁节点(Arbiter):不存数据、只参与投票;1 核 / 2GB 即可,可部署在应用服务器上节省成本
- 注意:副本集最多支持 7 个投票节点,非投票节点(如延迟节点、隐藏节点)不参与选举但可提供特殊功能
统一环境与安全配置
所有节点必须运行相同主版本(如全部为 4.2.23 或 6.0.15),操作系统保持一致(CentOS 7.6+ 或 Ubuntu 20.04+),端口开放且内网互通(延迟
- 防火墙放行 27017(服务端口)、27019(仲裁专用端口,如有)
- 生成并分发 Keyfile:用于节点间身份认证,权限必须设为 400(chmod 400 /data/mongodb/keyfile)
- 各节点 mongod.conf 中启用 auth 和 keyFile,并指定 replicaSet 名称(如 replSetName: rs0)
启动并初始化副本集
先逐个启动所有 mongod 实例,再用 mongo shell 连接任意一个节点,在 admin 数据库中执行初始化命令。
- 启动命令示例:mongod -f /etc/mongod.conf
- 连接后执行:rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "node1:27017" }, { _id: 1, host: "node2:27017" }, { _id: 2, host: "node3:27017", arbiterOnly: true } ] })
- 成功后运行 rs.status() 查看状态,确认 PRIMARY 出现且其他节点状态为 SECONDARY 或 ARBITER
验证高可用能力
初始化只是起点,必须验证故障转移是否真正生效。
- 手动停止主节点进程(kill -2 $(pgrep mongod)),等待约 10–30 秒
- 再次执行 rs.status(),观察是否已有新 PRIMARY 产生,原主节点重启后应自动变为 SECONDARY
- 用客户端驱动连接副本集连接字符串(如 mongodb://node1:27017,node2:27017,node3:27017/?replicaSet=rs0),测试写入是否持续成功
- 注意:不要依赖单节点地址,务必使用含全部节点的连接串,由驱动自动发现主节点











