最新消息:

MongoDB在线修改OPLog大小

Linux ipcpu 2959浏览

MongoDB在线修改OPLog大小.md
MongoDB的OPlog是MongoDB的核心数据,副本集的同步主要靠它,当业务繁忙时,Oplog的时间窗口可能会比较小,比如10分钟、半小时,这显然是不行的,至少应该保持在1天以上。要不然一旦SECONDARY出现问题,想要恢复就变成了一件麻烦事。

MongoDB的Oplog大小的修改从MongoDB3.6 开始就已经提供了修改命令

db.adminCommand({replSetResizeOplog: 1, size: 16000})

但是,很遗憾,我司还停留在MongoDB3.4的版本,按照官方文档只能按照如下操作步骤来修改了:

*1. 关闭mongod实例:

use admin
db.shutdownServer()

*2. 修改MongoDB的配置文件,然后重新启动MongoDB

端口修改为没有副本集连接的端口,比如29017
注释掉replication和sharding的所有选项

*3.备份oplog

mongodump --db local --collection 'oplog.rs' --port 29017 -o shard1

*4. 登录到新启动的MongoDB开始操作

#将oplog条目存储到temp
use local
db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
db.temp.find()
#移除原有oplog
db.oplog.rs.drop()
#新建oplog并导入
db.runCommand( { create: "oplog.rs", capped: true, size: (20 * 1024 * 1024 * 1024) } )
db.oplog.rs.save( db.temp.findOne() )

*5. 关闭MongoDB,并恢复配置文件,重启

*6. 登陆查看oplog是否成功,副本集是否连接成功。

对于副本集,应该先操作SECONDARY再操作PRIMARY。我稍微估算了下,我的原有oplog大小是1G,每个MongoDB实例的修改过程大约3-5分钟就可以完成。如果原有oplog比较大,需要考虑dump的时间。

参考资料

https://docs.mongodb.com/v3.4/tutorial/change-oplog-size/
https://docs.mongodb.com/v3.6/tutorial/change-oplog-size/

转载请注明:IPCPU-网络之路 » MongoDB在线修改OPLog大小