参考:https://blog.csdn.net/jianlong727/article/details/78933525
3.2修改oplogsize的文档:https://docs.mongodb.com/v3.2/tutorial/change-oplog-size/
mongodb 3.2 修改oplogsize的方法:
1、关闭这个从节点的mongodb进程
1.1 关进程
use admin
db.shutdownServer()
1.2 注销Replica set相关启动参数,并修改port端口号
vim mongod.conf ,注释掉下面几行,然后修改下监听端口
#replication:
# oplogSizeMB: 4096
# replSetName: set01
net:
port: 27111
然后,以单实例的方式启动这个从节点:
mongod -f mongod.conf
2、备份节点oplog日志
2.1 全备当前节点的oplog记录
mongodump --port 27111 --db local --collection 'oplog.rs' -o /root/oplog_all
2.2 备份oplog中最后一条记录
mongo --port 27111
use local
db.optmp.drop() ---清空临时表,存放oplog最近一条记录
db.optmp.save(db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() ) ---将最近一条记录存放到临时集合中
db.optmp.find() ---验证是否记录已存入 , 类似如下:
{ "_id" : ObjectId("5b857e9aaa9ffcbad436b99d"), "ts" : Timestamp(1535468213, 1), "h" : NumberLong("-6700258201084773806") }
3 先删除原oplog.rs集合,然后修改oplogsize:
use local
db.oplog.rs.drop()
然后再创建新oplog.rs集合 ,这里创建为6G
> db.runCommand( { create: "oplog.rs", capped: true, size: (6 * 1024 * 1024 * 1024) } )
{ "ok" : 1 }
> db.oplog.rs.stats().maxSize # 可以看到变成6G了
NumberLong("6442450944")
4、还原之前备份的最近一条记录
> db.oplog.rs.save(db.optmp.findOne())
> db.oplog.rs.find() ---查询验证是否已插入
5、关闭当前单实例进程,然后修改配置,重新加入副本集
> use admin
> db.shutdownServer()
vim mongod.conf ,注释掉下面几行,然后修改下监听端口
net:
port: 27017
replication:
oplogSizeMB: 6144
replSetName: set01
mongod -f mongod.conf
6、检查节点状态
登录到mongo shell中检查节点是否成功加入副本集
> rs.status()
检查oplogSize是否生效
set01:SECONDARY> db.getReplicationInfo()
{
"logSizeMB" : 6144, ## 可以看到这里变成6GB了
"usedMB" : 0.01,
"timeDiff" : 54,
"timeDiffHours" : 0.02,
"tFirst" : "Wed Aug 29 2018 01:19:49 GMT+0800 (CST)",
"tLast" : "Wed Aug 29 2018 01:20:43 GMT+0800 (CST)",
"now" : "Wed Aug 29 2018 01:24:16 GMT+0800 (CST)"
}
set01:SECONDARY> rs.printReplicationInfo()
configured oplog size: 6144MB
log length start to end: 54secs (0.02hrs)
oplog first event time: Wed Aug 29 2018 01:19:49 GMT+0800 (CST)
oplog last event time: Wed Aug 29 2018 01:20:43 GMT+0800 (CST)
now: Wed Aug 29 2018 01:24:41 GMT+0800 (CST)
在4.0里面,支持在线修改oplog的大小,从而不用重启:
db.adminCommand({replSetResizeOplog:1, size: 6144}) ## 设置为6GB, 注意这里的单位是 mb
use local
db.oplog.rs.stats().maxSize
4.0在线修改oplogsize的官方文档:https://docs.mongodb.com/manual/reference/configuration-options/index.html#replication.oplogSizeMB
附, 如何估算需要的oplogsize大小?
可以通过如下的命令查看当前的oplog能存放多久的操作记录:
connecting to: 127.0.0.1:27017/admin
set01:SECONDARY> rs.printReplicationInfo()
configured oplog size: 4096MB
log length start to end: 6223secs (1.73hrs)
oplog first event time: Mon Apr 22 2019 12:53:49 GMT+0800 (CST)
oplog last event time: Mon Apr 22 2019 14:37:32 GMT+0800 (CST)
now: Mon Apr 22 2019 14:37:32 GMT+0800 (CST)
可以看到,目前的oplog是4GB ,根据oplog first event time 和 oplog last event time 的差值,可以得出4g的oplog 差不多能存放 100分钟 的op操作。
如果我们将oplogsize扩大到 20G ,差不多能存放 500分钟 的op操作。(即最大能容忍8小时的某个节点的宕机)