无需重启数据库搭建MongoDB副本集实现服务器数据同步
实现MongoDB数据同步(类主从模式,尽量避免重启)
首先说明:MongoDB已经弃用了传统的主从复制,现在官方推荐用**副本集(Replica Set)**来实现实时数据同步,它自带故障转移功能,比旧主从更可靠。下面是针对你的场景的操作方案,尽量避免重启现有数据库实例:
前置检查
先确认两个服务器的MongoDB实例是否已经启用副本集支持:
在每个实例的MongoDB shell中执行:
db.adminCommand({getParameter: 1, replication: 1})
如果返回结果中包含"replSetName"字段,说明已经配置了副本集参数,可以直接进入下一步;如果没有,你需要先修改原实例的配置文件(添加replication.replSetName: "rs0",名称可自定义),然后重启一次原实例——这是启用副本集的必要步骤,之后的同步操作就不需要再重启了。
步骤1:初始化原服务器为副本集主节点
在原服务器的MongoDB shell中,执行以下命令初始化副本集(这里用rs0作为副本集名称,你可以换成自己的标识):
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "原服务器IP/域名:27017" } ] })
执行完成后,原实例会自动成为副本集的主节点。你可以用rs.status()查看副本集状态,确认主节点状态为PRIMARY。
步骤2:将新服务器加入副本集
在原服务器的MongoDB shell中,执行命令将新节点添加到副本集:
rs.add("新服务器IP/域名:27017")
执行后,副本集会自动开始从主节点同步数据。你可以每隔几秒执行一次rs.status(),等待新节点的状态变为SECONDARY,此时同步已经在后台运行。
步骤3:验证同步有效性
在原服务器的主节点上插入测试数据:
use test_sync_db db.test_col.insertOne({content: "check_sync_success"})
切换到新服务器的MongoDB shell,因为从节点默认不允许读操作,先执行以下命令开启读权限:
rs.slaveOk()
然后查询测试数据:
use test_sync_db db.test_col.findOne({content: "check_sync_success"})
如果能成功查询到这条数据,说明同步已经正常工作。
额外配置建议
- 确保两台服务器之间的27017端口可以互相访问(调整防火墙规则,允许双向通信)。
- 如果你的新服务器之前有旧数据,副本集会自动将其替换为主节点的数据,无需手动清理。
- 可以在副本集添加仲裁节点(可选),提升故障转移的可靠性,但不是必须的。
内容的提问来源于stack exchange,提问作者Wonton
相关产品推荐
相关产品推荐

