需要 MongoDB 自动故障切换、数据冗余和读扩展。副本集是三节点起步的最小生产形态,适合大多数业务;分片集群在数据量更大时再考虑。
openssl rand -base64 756 > /etc/mongodb/keyfile
chmod 400 /etc/mongodb/keyfile
chown mongodb:mongodb /etc/mongodb/keyfile
mongod.conf:cat > /etc/mongod.conf <<'EOF'
storage:
dbPath: /var/lib/mongodb
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0
replication:
replSetName: rs0
security:
keyFile: /etc/mongodb/keyfile
EOF
systemctl enable --now mongod
systemctl status mongod
mongosh --host node1:27017
rs.initiate({
_id: "rs0",
members: [
{_id: 0, host: "node1:27017", priority: 2},
{_id: 1, host: "node2:27017", priority: 1},
{_id: 2, host: "node3:27017", priority: 1}
]
})
rs.status()
use admin
db.createUser({user: "admin", pwd: "***", roles: ["root"]})
use app
db.createUser({user: "app", pwd: "***", roles: [{role: "readWrite", db: "app"}]})
mongodb://app:***@node1:27017,node2:27017,node3:27017/app?replicaSet=rs0
mongodump 或文件系统快照,备份从节点以减轻主节点压力。rs.status() 显示一个 PRIMARY 和两个 SECONDARY。rs.conf(),回滚时 rs.reconfig()。rs.stepDown() 切换主节点。localhost 初始化,其他节点无法加入。--oplog,恢复点不一致。mongosh — 副本集初始化和状态mongod — 数据库进程mongodump / mongorestore — 备份恢复rs.status() / rs.conf() — 副本集检查mongostat / mongotop — 性能观测