MongoDB中 oplog的作用是什么

发布时间:2021-07-16 16:58:08 作者:Leah
来源:亿速云 阅读:358

本篇文章为大家展示了MongoDB中 oplog的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1:oplog简介

oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的。每个节点都有oplog,记录这从主节点复制过来的信息,这样每个成员都可以作为同步源给其他节点。

 Oplog 可以说是Mongodb Replication的纽带了。

2:副本集数据同步的过程

副本集中数据同步的详细过程:Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败(只有当同步源的数据损坏或者数据与主节点不一致时才可能发生),则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作执行多次,与执行一次的效果是一样的。

  当Primary进行写操作的时候,会将这些写操作记录写入Primary的Oplog 中,而后Secondary会将Oplog 复制到本机并应用这些操作,从而实现Replication的功能。
  同时由于其记录了Primary上的写操作,故还能将其用作数据恢复。
  可以简单的将其视作Mysql中的binlog。

3:oplog的增长速度

oplog是固定大小,他只能保存特定数量的操作日志,通常oplog使用空间的增长速度跟系统处理写请求的速度相当,如果主节点上每分钟处理1KB的写入数据,那么oplog每分钟大约也写入1KB数据。如果单次操作影响到了多个文档(比如删除了多个文档或者更新了多个文档)则oplog可能就会有多条操作日志。db.testcoll.remove() 删除了1000000个文档,那么oplog中就会有1000000条操作日志。如果存在大批量的操作,oplog有可能很快就会被写满了。

  Oplog 是一个capped collection。
  在64位的Linux, Solaris, FreeBSD, and Windows 系统中,Mongodb默认将其大小设置为可用disk空间的5%(默认最小为1G,最大为50G)或也可以在mongodb复制集实例初始化之前将mongo.conf中oplogSize设置为我们需要的值

  local.oplog.rs 一个capped collection集合.可在命令行下使用--oplogSize 选项设置该集合大小尺寸.
  但是由于Oplog 其保证了复制的正常进行,以及数据的安全性和容灾能力。

4:oplog注意事项:

local.oplog.rs特殊的集合。用来记录Primary节点的操作

oplog的大小

capped collection是MongoDB中一种提供高性能插入、读取和删除操作的固定大小集合,当集合被填满的时候,新的插入的文档会覆盖老的文档。

所以,oplog表使用capped collection是合理的,因为不可能无限制的增长oplog。MongoDB在初始化副本集的时候都会有一个默认的oplog大小:

oplog的大小设置是值得考虑的一个问题,如果oplog size过大,会浪费存储空间;如果oplog size过小,老的oplog记录很快就会被覆盖,那么宕机的节点就很容易出现无法同步数据的现象。

比如,基于上面的例子,我们停掉一个备份节点(port=33333),然后通过主节点插入以下记录,然后查看oplog,发现以前的oplog已经被覆盖了。

通过MongoDB shell连接上这个节点,会发现这个节点一直处于RECOVERING状态

解决方法:

数据同步

在副本集中,有两种数据同步方式:

initial sync

当遇到上面例子中无法同步的问题时,只能使用以下两种方式进行initial sync了

通过上面两种方式中的一种,都可以重新恢复"port=33333"的节点。改变一直处于RECOVERING状态的错误。

查看oplog的信息

通过"db.printReplicationInfo()"命令可以查看oplog的信息

字段说明:

<h4 id="_nav_7" background-position:left top;background-size:initial;background-repeat:no-repeat;background-attachment:initial;background-origin:initial;background-clip:initial;height:auto;line-height:1.8;padding-left:20px;color:#666666;margin:10px 0px;font-family:verdana, Arial, Helvetica, sans-serif;white-space:normal;"> 查看slave状态

通过"db.printSlaveReplicationInfo()"可以查看slave的同步状态

副本节点中执行db.printSlaveReplicationInfo()命令可以查看同步状态信息

上述内容就是MongoDB中 oplog的作用是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. MongoDB 更改 Oplog Size 大小
  2. MongoDB中复制选举的原理是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mongodb oplog

上一篇:MongoDB 4.0 中怎么实现事务

下一篇:Web开发中客户端跳转与服务器端跳转有什么区别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》