下面给你一份 Linux 下 MongoDB 副本集(Replica Set)配置 的完整示例,从单机多实例到多机都可以参考。
假设:
示例节点:
192.168.1.10 (node1)
192.168.1.11 (node2)
192.168.1.12 (node3)
以 CentOS 为例:
sudo yum install -y mongodb-org
或 Ubuntu:
sudo apt install -y mongodb-org
启动服务:
sudo systemctl start mongod
sudo systemctl enable mongod
MongoDB 配置文件一般在:
/etc/mongod.conf
storage:
dbPath: /var/lib/mongo
journal:
enabled: true
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
bindIp: 0.0.0.0
port: 27017
processManagement:
fork: true
在 每个节点 的 mongod.conf 中添加:
replication:
replSetName: rs0
rs0是副本集名称,所有节点必须一致
修改后重启:
sudo systemctl restart mongod
连接 MongoDB:
mongo
执行初始化命令:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.10:27017" },
{ _id: 1, host: "192.168.1.11:27017" },
{ _id: 2, host: "192.168.1.12:27017" }
]
})
查看状态:
rs.status()
rs.isMaster()
在 PRIMARY 写数据:
use test
db.user.insert({name:"tom"})
在 SECONDARY 读(需先开启):
rs.secondaryOk()
db.user.find()
rs.addArb("192.168.1.13:27017")
cfg = rs.conf()
cfg.members[0].priority = 2
rs.reconfig(cfg)
firewall-cmd --add-port=27017/tcp --permanent
firewall-cmd --reload
如果你只有一台 Linux 机器:
mongod --port 27017 --dbpath /data/rs1 --replSet rs0
mongod --port 27018 --dbpath /data/rs2 --replSet rs0
mongod --port 27019 --dbpath /data/rs3 --replSet rs0
然后 rs.initiate() 即可。
❌ Not primary
→ 写操作必须在 PRIMARY
❌ 节点一直 STARTUP
→ 检查 bindIp、防火墙、hosts 解析
❌ SECONDARY 不能读
→ 执行 rs.secondaryOk()
如果你需要:
告诉我你的使用场景,我可以给你更针对性的配置。