前景:

由于某些情况,我们必须修改oplog size来增大同步窗口期,例如业务的快速增长,延迟节点无法跟上Primary节点的oplog增长速度;MongoDB在3.6版本后才对oplogSize支持了动态修改,但MongoDB版本低于3.6版本则需要逐个剔除副本集逐个扩容,至此记录修改oplogsize的步骤。

查询oplogsize大小命令:

repset:PRIMARY> db.getReplicationInfo()            #查看 oplog 的状态,输出信息包括 oplog 日志大小,操作日志记录的起始时间

repset:PRIMARY> db.printReplicationInfo()          #查看oplog的状态、总大小、使用大小、存储的时间范围、记录时长。

repset:PRIMARY> db.oplog.rs.stats().maxSize     #显示当前的oplog大小 maxSize

repset:PRIMARY> db.getReplicationInfo()
{"logSizeMB" : 1755.03173828125,"usedMB" : 0.84,"timeDiff" : 861042,"timeDiffHours" : 239.18,"tFirst" : "Mon Jun 24 2019 16:18:20 GMT+0800 (CST)","tLast" : "Thu Jul 04 2019 15:29:02 GMT+0800 (CST)","now" : "Thu Jul 04 2019 15:29:06 GMT+0800 (CST)"
}
repset:PRIMARY> db.printReplicationInfo()
configured oplog size:   1755.03173828125MB
log length start to end: 861132secs (239.2hrs)
oplog first event time:  Mon Jun 24 2019 16:18:20 GMT+0800 (CST)
oplog last event time:   Thu Jul 04 2019 15:30:32 GMT+0800 (CST)
now:                     Thu Jul 04 2019 15:30:36 GMT+0800 (CST)

一、修改MongoDB3.6版本以上的oplog

3.6版本后支持的动态扩容方法

1、修改之前oplogsize的大小:

repset:PRIMARY> db.getReplicationInfo()
{"logSizeMB" : 1755.03173828125,    #大小为1.8G"usedMB" : 0.83,"timeDiff" : 860512,"timeDiffHours" : 239.03,"tFirst" : "Mon Jun 24 2019 16:18:20 GMT+0800 (CST)","tLast" : "Thu Jul 04 2019 15:20:12 GMT+0800 (CST)","now" : "Thu Jul 04 2019 15:20:15 GMT+0800 (CST)"
}

登录到mongo shell后查看oplog.rs集合大小

repset:PRIMARY> use local
switched to db local
repset:PRIMARY> db.oplog.rs.stats().maxSize
NumberLong(1840284160)  #单位为bytes,即1.8G

2、通过管理命令修改

repset:PRIMARY> use local
switched to db local
repset:PRIMARY> db.adminCommand({replSetResizeOplog:1,size:4096})   #单位为MB,扩容至4G
{"ok" : 1,"operationTime" : Timestamp(1562225042, 1),"$clusterTime" : {"clusterTime" : Timestamp(1562225042, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
}

3、验证是否成功

repset:PRIMARY> db.oplog.rs.stats().maxSize
NumberLong("4294967296")

至此,Mongodb的oplogsize动态扩展成功。

注意:

更改给定副本集成员 replSetResizeOplog的oplog大小不会更改副本集中任何其他成员的oplog大小。必须replSetResizeOplog在群集中的每个副本集成员上运行 ,以更改所有成员的oplog大小。

减小OPLOG大小并不能自动收回磁盘空间。您必须compact针对数据库中的 oplog.rs集合运行localcompact 阻止它运行的数据库上的所有操作。运行compact针对oplog.rs因此防止OPLOG同步。有关调整oplog和压缩大小的过程 oplog.rs,请参阅更改Oplog的大小。

二、修改MongoDB3.6版本以下的oplog

需求: Oplog扩容,尽量少的影响业务

思路:先由从节点开始,一台一台的从复制集中剥离,修改,再回归复制集,最后操作主节点来减少业务影响时间。

流程:先关闭一个从节点,去掉–replSet启动参数,更换启动端口–port,将节点以单机模式启动。

备份:备份现有的oplog

详细过程:

1、关闭从节点

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# ps -ef|grep mongo
root     28527     1  0 14:46 ?        00:00:17 mongod -f /etc/mongod1.conf
root     28605     1  0 14:46 ?        00:00:18 mongod -f /etc/mongod2.conf
root     28686     1  0 14:46 ?        00:00:12 mongod -f /etc/mongod3.conf
root     30794 28282  0 15:50 pts/0    00:00:00 grep mongo
[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongod --shutdown -f /etc/mongod2.conf
killing process with pid: 28605

2、修改从节点配置文件,

注释副本集配置参数并修改端口,及单击模式启动

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 30940
child process started successfully, parent exiting

注:此时停止掉副节点的依旧保持在副本集中,不过此时它的状态为不可达,健康值为0。在作为单机模式启动修改完成,再以副本集模式启动即可。

3、备份节点oplog记录

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongodump -h 172.17.136.124:27021 -d  local -c oplog.rs -o /root/oplog
2019-07-04T15:59:01.603+0800    writing local.oplog.rs to
2019-07-04T15:59:01.630+0800    done dumping local.oplog.rs (8069 documents)

4、进入mongo,将现在的oplog中最新的位置复制到tmp表(local数据库)中:

> use local
switched to db local
> db.temp.save( db.oplog.rs.find( { }, { ts: 1, h: 1 } ).sort( {$natural : -1} ).limit(1).next() )
WriteResult({ "nInserted" : 1 })
> db.temp.find()  #验证记录是否存在
{ "_id" : ObjectId("5d1db2646bebcb3f6483cce3"), "ts" : Timestamp(1562226683, 1), "h" : NumberLong("2207544736706975504") }

5、删除原有oplog集合

> db.oplog.rs.drop()
true

6、创建新的oplog集合,为4G

> db.runCommand({create:"oplog.rs",capped:true,size:(4*1024*1024*1024)})
{ "ok" : 1 }  #创建成功

7、将tmp中的数据存储到新的oplog中,并验证

> db.oplog.rs.save( db.temp.findOne() )
WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : ObjectId("5d1db2646bebcb3f6483cce3")
})
> db.oplog.rs.find()  #验证{ "_id" : ObjectId("5d1db2646bebcb3f6483cce3"), "ts" : Timestamp(1562226683, 1), "h" : NumberLong("2207544736706975504") }

8、关闭从节点,并恢复原有config配置,并在config中设置oplogSize为你之前设置的大小,并启动。

关闭从节点

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongod --shutdown -f /etc/mongod2.conf
killing process with pid: 30940

恢复原有配置文件时,要注意oplogSizeMB参数值的修改,修改为扩容后的值

#配置文件中指定oplog大小replication:oplogSizeMB: 4096replSetName: repset

重新启动从节点

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongod -f /etc/mongod2.conf
about to fork child process, waiting until server is ready for connections.
forked process: 31702
child process started successfully, parent exiting

9、登陆mongoshell检查节点状态及oplog大小

[root@iZ2ze6rm1auwacy4tk6ucaZ ~]# mongo 172.17.136.124:27018repset:SECONDARY> db.getReplicationInfo()
{"logSizeMB" : 4096,"usedMB" : 0.01,"timeDiff" : 0,"timeDiffHours" : 0,"tFirst" : "Thu Jul 04 2019 15:51:23 GMT+0800 (CST)","tLast" : "Thu Jul 04 2019 15:51:23 GMT+0800 (CST)","now" : "Thu Jul 04 2019 16:20:43 GMT+0800 (CST)"
}

至此,oplog大小修改完毕,依次修改其他节点,修改主节点是可先降级或直接关闭主节点

Primary>rs.stepDown()          ---可以更有效的产生选举

补充:

1、若是在启动副本集是指定了oplogsize大小。在动态扩容后,oplog.rs集合大小已发生变化,但配置文件中最初指定的oplogsize大小不变,并且重启后依旧不变,但是oplogsize依旧是扩容之后的大小。

2、如果减小oplogsize的大小,可能会造成oplog记录丢失,导致节点异常,故不可减小。

参考文档:

https://docs.mongodb.com/manual/reference/command/replSetResizeOplog/#dbcmd.replSetResizeOplog  #oplog动态扩容官网资料

https://docs.mongodb.com/manual/core/replica-set-oplog/#oplog    #oplog及副本集相关文档

http://www.mongoing.com/oplog #oplog扩容参考文档

http://www.mongoing.com/blog/oplog-size #oplog大小设置估算

http://blog.itpub.net/31547523/viewspace-2214748/

https://www.cnblogs.com/operationhome/p/10688798.html

转载于:https://www.cnblogs.com/wusy/p/11132795.html

Mongodb的oplogsize修改相关推荐

  1. [转载]MongoDB的$inc修改器

    MongoDB的$inc修改器相当于编程语言中的 "+=" "$inc"只能用于操作数值类型的数据,包括整数.长整数和双精度浮点数,用于其他类型的数据会导致操作 ...

  2. Mongodb数据库中修改器$push和$addToSet的相同点和不同点

    Mongodb数据库中修改器$push和$addToSet的相同点和不同点 对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提 ...

  3. mongodb添加创建修改时间_mongodb副本集生产环境下部署案例,推荐一个主两个从三台机器...

    Linux中部署Mongodb副本集 提示: 以下操作步骤较多,请耐心阅读. 关于理论部分请参考上篇浅谈mongodb副本集. 1. 准备 192.168.102.110 master 192.168 ...

  4. mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

    一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...

  5. mongodb集群修改IP地址

    文章目录 优雅的关闭nodeA上的mongod实例 修改主机名和IP地址 配置分片 具体的修改方法参考:https://docs.mongodb.com/v3.2/tutorial/change-ho ...

  6. mongodb用户权限修改,删除以及robomongo显示问题

    环境 mongodb:3.4 robomongo:1.0.RC1 需求 之前我介绍过,mongodb用户权限管理配置,之后我自己有个这样的想法,能不能像MySQL客户端那样,一次可以显示多个数据库? ...

  7. mongodb服务器怎么修改,MongoDB修改数据的2种方法

    在MongoDB中,db.collection.ipdate()和db.collection.save()方法都可以修改集合中已存在的文档.db.collection.update()方法对修改提供额 ...

  8. mongodb副本集修改配置问题

    因虚拟机地址被占用,需要重新设置ip地址,这时需要修改副本集中的IP地址配置: 1: 查看配置rs.config():需要找到primary主机,在该主节点服务器上才有权限修改配置 2:rs.remo ...

  9. mongodb最大连接数、最大连接数修改

    mongodb最大连接数是20000. 所以业界流传一段话,千万级以下的用MySQL.千万级以上的用mongodb,亿级以上的用Hadoop. 查看mongodb最大连接数 mongodb/bin/m ...

  10. mongodb数据库扩展名_MongoDB如何存储数据

    想要深入了解MongoDB如何存储数据之前,有一个概念必须清楚,那就是Memeory-Mapped Files. Memeory-Mapped Files 下图展示了数据库是如何跟底层系统打交道的. ...

最新文章

  1. 关于机器学习算法的16个技巧
  2. spring boot 学习(二)spring boot 框架整合 thymeleaf
  3. Java关键字——instanceof
  4. 学生生涯---真的就这样逝去了!后悔已不足以!
  5. Python多线程之构建线程池
  6. List类集接口-ArrayList
  7. 如何在服务器上部署pdf文件,详解如何在云服务器上部署Laravel.pdf
  8. 边缘计算高考题!全答对就可以去华为上班!
  9. HashMap和Hashtable 线程安全性
  10. 赚钱是成年人最大的体面
  11. java随笔-扫描使用指定注解的类与方法
  12. DM6467T开发板领航——开发环境
  13. oracle 索引监控
  14. 苹果id怎么注册?老果粉教你创建新的Apple ID
  15. c语言将首字母变大写,c语言问题 将首字母变为大写
  16. Kotlin - 面向对象之抽象类与接口
  17. 将字符串中的中文转为拼音(java)
  18. 哪些网站让你觉得发现了新大陆?分享几个神奇的黑科技网站
  19. 一个40多岁老程序员的学习之路,在别人为“中年危机”忧愁时,你可以淡然处之
  20. 第三次寻人启事,寻找在日本的朋友王君

热门文章

  1. C++命名空间和头文件的关系 例如已经使用了#includestring,为什么还要 using std::string?...
  2. Linux 基本操作命令
  3. position学习终结者(二)
  4. Eclipse或者MyEclipse的Help菜单下找不到SoftWare Updates菜单的解决方法
  5. USB转串口线突然不好用了
  6. Thinking in Java 10.8.1 闭包与回调
  7. Windows下Cesium Terrain Builder编译 (VS2015)
  8. 解决IIS7.5及以后中URL文件名有加号或空格导致显示404错误的问题
  9. python自动发邮件mysql_python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  10. python中迭代器_【Python】解析Python中的迭代器