前言
- 有一台单实例 MongoDB 服务器已经运行半年了,需要将其扩展为副本集
- 3 台服务器的操作系统均为 Ubuntu 20.04
- 3 台服务器的 MongoDB 版本均为 4.4
- 扩展示意图
操作步骤
- 备份
mongo0
上的数据 修改配置文件
/etc/mongod.conf
,官方文档: https://docs.mongodb.com/v4.4...# 增加或修改 security: authorization: enabled keyFile: /data/mongo/security/rs0.key replication: replSetName: rs0
创建目录,并修改所有者
sudo mkdir /data/mongo/security sudo chown -R mongodb:mongodb /data/mongo/security/
生成密钥文件,分发到各机器。官方文档:https://docs.mongodb.com/v4.4...
openssl rand -base64 756 > /data/mongo/security/rs0.key sudo chown mongodb:mongodb /data/mongo/security/rs0.key sudo chmod 400 /data/mongo/security/rs0.key
重启 MongoDB 服务
sudo systemctl restart mongod.service
配置
/etc/hosts
文件# 添加或修改 192.168.31.20 mongo0 192.168.31.34 mongo1 192.168.31.35 mongo2
登录
mongo0
初始化副本集节点mongo mongodb://user:password@192.168.31.20:27017/?authSource=admin
rs.initiate({ _id: "rs0", members: [{ _id: 0, priority: 9, // 0-1000,值越大优先级约高 host: "mongo0:27017" }, { _id: 1, priority: 7, host: "mongo1:27017" }, { _id: 2, priority: 7, host: "mongo2:27017" }] })
查看副本集状态
rs0:PRIMARY> rs.status()
查看从节点数据同步状态
rs0:PRIMARY> rs.printSecondaryReplicationInfo() source: mongo1:27017 syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST) 1615602247 secs (448778.4 hrs) behind the primary source: mongo2:27017 syncedTo: Thu Jan 01 1970 08:00:00 GMT+0800 (CST) 1615602247 secs (448778.4 hrs) behind the primary
修改优先级
rs0:PRIMARY> conf = rs.conf() rs0:PRIMARY> conf.members[1].priority = 11 rs0:PRIMARY> conf.members[2].priority = 11 rs0:PRIMARY> rs.reconfig(conf)
- 如果数据量大,同步时间过长,可以考虑拷贝文件的 resync 方式来进行全量同步(initial sync)。
MongoDB 副本集的 10 种状态
官方文档:https://docs.mongodb.com/v4.4...
STARTUP PRIMARY SECONDARY RECOVERING STARTUP2 UNKNOWN ARBITER DOWN ROLLBACK REMOVED
本文出自 qbit snap
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。