参考: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小时的某个节点的宕机)