现象:
由于调大oplog的值后,导致从库宕机,日志报如下信息:
1 | 2019-08-10T08:32:40 I REPL [replication-2] could not find member to sync from |
原因:
由于存在延迟从库的问题,延迟从库由于延迟,还没有应用到oplog就被“drop”了,进而导致延迟从库处于recovering状态。
解决方案
- 先取消延迟配置,扩容延时从库的oplog大小,再扩容主库的oplog大小。
- 对主库先降级再进行升级操作。
oplog扩容流程
- 将需扩容oplog大小的库端口换成一个系统上未使用的新端口,如:28700。
- 关库
- 修改配置文件注释认证相关,修改oplog大小,如:将oplog扩容到50GB。
1
2vim /usr/local/mongodb/conf/mongodb.conf
oplogSizeMB: 51200 - 重新启动库
1
/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf
- 登录进库
1
mongo 127.0.0.1:28700/admin -u admin -p password --authenticationDatabase admin
- 执行oplog recreate操作
1
2
3
4
5
6
7
8
9
10use local
db=db.getSiblingDB('local')
db.temp.drop()
db.temp.save(db.oplog.rs.find({}, {ts: 1, h: 1}).sort({$natural: -1}).limit(1).next())
db.temp.find()
db=db.getSiblingDB('local')
db.oplog.rs.drop()
db.runCommand({create: "oplog.rs", capped: true, size: (80 *1024 * 1024 * 1024)})
db.oplog.rs.save(db.temp.findOne())
db.oplog.rs.find() - 关库,修改mongodb.conf为原始值,启动。
1
mongo 127.0.0.1:28700/admin -u admin -p password --authenticationDatabase admin