You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已搭建MongoDB分片集群后如何配置复制集实现高可用

MongoDB分片集群复制集高可用配置方案

核心疑问解答

你不能只给每个现有服务器加1个secondary节点就完成搭建,MongoDB复制集依赖多数派节点存活才能完成主节点选举、提供写入服务,偶数节点集群存在脑裂风险,单节点故障就会导致集群不可用。

现有架构适配调整说明

你当前的部署架构需要做以下调整即可满足高可用要求:

  • mongos实例本身是无状态服务,你已经跨2个数据中心部署2个实例,只要前端做好请求负载均衡,这一层已经满足高可用要求,不需要配置复制集
  • 配置服务器复制集(CSRS)官方要求必须为奇数个节点,最低要求3个数据承载节点(不允许使用仲裁节点),你现有2个配置服务器,需要新增1个配置服务器节点组成3节点复制集
  • 每个分片的复制集同样需要奇数个节点,你现有2个分片节点,新增1个secondary节点组成3节点复制集即可满足基础高可用要求,跨DC部署的情况下可以给同业务主可用区的节点设置更高的选举优先级,避免主节点跨DC切换导致访问延迟升高

具体操作步骤

1. 前置准备

所有新增节点完成以下配置:

  • 安装和现有节点大版本完全一致的MongoDB
  • 配置和集群统一的密钥文件,开启身份验证
  • 确保跨DC私有网络中所有节点的MongoDB服务端口(默认27017)互通

2. 配置服务器复制集搭建

任选一个现有配置节点执行以下操作:

  1. 以复制集模式重启该节点,配置文件中添加replication.replSetName参数指定配置服务器复制集名称,比如cfg_rs
  2. 进入mongo shell执行初始化命令:
rs.initiate({
  _id: "cfg_rs",
  configsvr: true,
  members: [
    {_id: 0, host: "现有配置节点1地址:端口"},
    {_id: 1, host: "现有配置节点2地址:端口"},
    {_id: 2, host: "新增配置节点地址:端口"}
  ]
})
  1. 执行rs.status()确认所有节点状态正常,1个primary、2个secondary

3. 分片复制集搭建

对每个分片分别执行以下操作:

  1. 以复制集模式重启现有分片节点,配置文件中添加replication.replSetName参数指定当前分片的复制集名称,比如shard1_rs
  2. 进入主分片节点的mongo shell执行初始化命令:
rs.initiate({
  _id: "shard1_rs",
  members: [
    {_id: 0, host: "现有分片节点1地址:端口", priority: 2}, // 主可用区节点优先级更高
    {_id: 1, host: "现有分片节点2地址:端口", priority: 1},
    {_id: 2, host: "新增分片节点地址:端口", priority: 1}
  ]
})
  1. 执行rs.status()确认所有节点状态正常,数据同步无异常

4. 更新mongos配置

修改所有mongos实例的配置文件:

  • 将sharding.configDB参数修改为配置服务器复制集地址格式,比如cfg_rs/配置节点1地址:端口,配置节点2地址:端口,配置节点3地址:端口
  • 滚动重启所有mongos实例,重启后验证分片数据读写正常

5. 功能验证

  • 手动终止任意1个配置节点/分片节点进程,验证集群可以正常选举新主,读写请求不受影响
  • 验证跨DC节点数据同步延迟符合业务要求

内容的提问来源于stack exchange,提问作者olli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 15:45:08