linux部署mongodb副本集实现高可用,需配置3节点(2数据+1仲裁或全量数据)、统一hosts与端口、关闭防火墙、设bindip为内网ip、指定相同replsetname,再通过rs.initiate初始化并验证状态。

Linux 上部署 MongoDB 副本集实现高可用,核心是让多个节点自动协同、故障时无缝接管。它不依赖外部调度器,靠 MongoDB 自身的选举机制和 oplog 复制完成,关键在于配置一致、网络通达、角色合理。
节点规划与基础准备
最小可用副本集建议 3 节点:2 个数据节点 + 1 个仲裁节点(arbiter),或 3 个全量数据节点。仲裁节点不存数据,只参与投票,节省资源且避免脑裂。
- 统一关闭防火墙或放行 27017 端口(如 sudo ufw disable 或 sudo firewall-cmd --permanent --add-port=27017/tcp)
- 每台机器配置主机名与 /etc/hosts 映射,例如:
192.168.10.10 mongo1
192.168.10.11 mongo2
192.168.10.12 mongo3 - 创建数据目录并赋权:sudo mkdir -p /data/db && sudo chown $USER:$USER /data/db
- 确保所有节点安装相同版本 MongoDB(推荐 6.0+ 社区版),避免兼容性问题
配置文件统一修改
每个节点编辑 /etc/mongod.conf(或自定义路径),重点配置三项:
- bindIp:设为 0.0.0.0 或具体内网 IP,不可仅留 127.0.0.1(否则其他节点连不上)
- port:默认 27017,保持一致
- replication.replSetName:统一设为同一名称,如 rs0
- (可选)security.authorization 设为 true 后需配套启用 keyfile 或 x.509 认证
保存后重启服务:sudo systemctl restart mongod
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
初始化副本集并验证状态
任选一台节点连接 mongo shell:mongosh --host mongo1 --port 27017
执行初始化命令(注意替换实际主机名/IP):
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo1:27017", priority: 2 },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017", arbiterOnly: true }
]
})
几秒后运行 rs.status() 查看各节点状态,应显示 "stateStr" : "PRIMARY" 和两个 "SECONDARY"(或含 "ARBITER")。若卡在 STARTUP 或报连接失败,请检查 hosts、防火墙、端口监听(netstat -tuln | grep 27017)
读写分离与应用接入要点
副本集默认只允许主节点写入,但读请求可分发到从节点以减轻压力:
- 应用连接字符串中添加 ?readPreference=secondaryPreferred(Node.js、Python PyMongo 等驱动均支持)
- 避免在从节点执行写操作,会直接报错
- 生产环境务必启用认证:生成 keyfile(openssl rand -base64 756 > /etc/mongo-keyfile),各节点 chmod 400 并在配置中加入 security.keyFile
- 定期用 mongodump 备份,并在 secondary 节点上执行(不影响主节点负载)










