下面以 Ubuntu 22.04 / 20.04 为例,说明如何配置 MongoDB 副本集(Replica Set)。
示例为 3 节点副本集(1 主 2 从),你也可以在一台机器上用不同端口模拟。
假设 3 台服务器(或同一台 3 个端口):
| 节点 | IP | 端口 |
|---|---|---|
| node1 | 192.168.1.101 | 27017 |
| node2 | 192.168.1.102 | 27017 |
| node3 | 192.168.1.103 | 27017 |
如果是单机测试:
- 27017 / 27018 / 27019
sudo apt update
sudo apt install -y mongodb-org
启动并设置开机自启:
sudo systemctl enable mongod
sudo systemctl start mongod
编辑配置文件:
sudo vim /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0 # 生产建议写具体IP
replication:
replSetName: rs0
rs0是副本集名称,三台必须一致
重启 MongoDB:
sudo systemctl restart mongod
连接 MongoDB:
mongosh
执行初始化命令:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017" },
{ _id: 1, host: "192.168.1.102:27017" },
{ _id: 2, host: "192.168.1.103:27017" }
]
})
查看状态:
rs.status()
rs.isMaster()
在 PRIMARY 节点:
use test
db.demo.insert({name:"mongo"})
在 SECONDARY 节点:
rs.secondaryOk() # 旧版本为 rs.slaveOk()
use test
db.demo.find()
rs.addArb("192.168.1.104:27017")
rs.reconfig({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.101:27017", priority: 2 },
{ _id: 1, host: "192.168.1.102:27017", priority: 1 },
{ _id: 2, host: "192.168.1.103:27017", priority: 1 }
]
})
sudo ufw allow 27017
mongod --port 27018 --dbpath /data/db2 --replSet rs0 --fork --logpath /var/log/mongo2.log
mongod --port 27019 --dbpath /data/db3 --replSet rs0 --fork --logpath /var/log/mongo3.log
❌ Not primary
→ 写操作必须在 PRIMARY 节点
❌ 节点一直 STARTUP
→ 检查防火墙、bindIp、hosts 配置
❌ 无法连接
→ 确认 bindIp 不是 127.0.0.1
如果你需要:
可以继续问我。