精华内容
下载资源
问答
  • mongodb oplog

    2015-06-30 10:53:33
    mongodb oplog的使用 所在位置: Master/Slave架构: local.oplog.$main Replica sets架构: local.oplog.rs Sharding架构: 每个分片中 db.oplog.rs.findone() mongosync mongooplog 查看某个mongod...
    mongodb oplog的使用

    所在位置:
    Master/Slave架构: local.oplog.$main
    Replica sets架构: local.oplog.rs
    Sharding架构: 每个分片中

    db.oplog.rs.findone()
    mongosync
    mongooplog

    查看某个mongod上oplog的详细情况: rs.printReplicationInfo()
    展开全文
  • MongoDB oplog流包装器 安装 npm install oplog-stream 用法 var oplog = require ( 'oplog-stream' ) oplog ( function ( err , stream ) { if ( err ) { throw err } stream . on ( 'data' , function ( ...
  • MongoDB Oplog

    2015-03-29 09:21:00
    MongoDB有一种特殊的Collection叫Capped collections,它的插入速度非常快,基本和磁盘的写入速度差不多,并且支持按照插入顺序高效的查询操作。Capped collections的大小是固定的,它的工作方式很像环形缓冲器...

    Capped Collections

    MongoDB有一种特殊的Collection叫Capped collections,它的插入速度非常快,基本和磁盘的写入速度差不多,并且支持按照插入顺序高效的查询操作。Capped collections的大小是固定的,它的工作方式很像环形缓冲器(circular buffers), 当剩余空间不足时,会覆盖最先插入的数据。

    Capped collections的特点是高效插入和检索,所以最好不要在Capped collections上添加额外的索引,否则会影响插入速度。Capped collections可以用于以下场景:

    • 存储日志: Capped collections的first-in-first-out特性刚好满足日志事件的存储顺序;
    • 缓存小量数据:因为缓存的特点是读多写少,所以可以适当使用索引提高读取速度。

    Capped collections的使用限制:

    • 如果更新数据,你需要为之创建索引以防止collection scan;
    • 更新数据时,文档的大小不能改变。比如说name属性为'abc',则只能修改成3个字符的字符串,否则操作将会失败;
    • 数据不允许删除,如果非删除不可,只能drop collection
    • 不支持sharding
    • 默认只支持按自然顺序(即插入顺序)返回结果

    Capped collections可以使用$natural操作符按插入顺序的正序或反序返回结果:

    db['oplog.rs'].find({}).sort({$natural: -1})

    二、oplog简介

    Oplog是一种特殊的Capped collections,特殊之处在于它是系统级Collection,记录了数据库的所有操作,集群之间依靠Oplog进行数据同步。Oplog的全名是local.oplog.rs,位于local数据下。由于local数据不允许创建用户,如果要访问Oplog需要借助其它数据库的用户,并且赋予该用户访问local数据库的权限,例如:

    db.createUser({
       user: "play-community",
       pwd: "******",
       "roles" : [
        {
          "role" : "readWrite", 
          "db" : "play-community"
        }, 
        {
          "role" : "read", 
          "db" : "local"
        }
      ]
    })

    Oplog记录的操作记录是幂等的(idempotent),这意味着你可以多次执行这些操作而不会导致数据丢失或不一致。例如对于$inc操作,Oplog会自动将其转换为$set操作,例如原始数据如下:

    { 
      "_id" : "0", 
      "count" : 1.0
    }
    

    执行如下$inc操作:

    db.test.update({_id: "0"}, {$inc: {count: 1}})
    

    Oplog记录的日志为:

    { 
      "ts" : Timestamp(1503110518, 1), 
      "t" : NumberLong(8), 
      "h" : NumberLong(-3967772133090765679), 
      "v" : NumberInt(2), 
      "op" : "u", 
      "ns" : "play-community.test", 
      "o2" : {
        "_id" : "0"
      }, 
      "o" : {
        "$set" : {
          "count" : 2.0
        }
      }
    }
    

    这种转换可以保证Oplog的幂等性。另外Oplog为了保证插入性能,不允许额外创建索引。

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

    Timestamps格式

    MongoDB有一种特殊的时间格式Timestamps,仅用于内部使用,例如上面Oplog记录:

    Timestamp(1503110518, 1)
    

    Timestamps长度为64位:

    • 前32位是time_t值,表示从epoch时间至今的秒数
    • 后32位是ordinal值,该值是一个顺序增长的序数,表示某一秒内的第几次操作


    三、副本集数据同步的过程

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

    3.1、同步类型

    initial sync(初始化):这个过程发生在当副本集中创建一个新的数据库或其中某个节点刚从宕机中恢复,或者向副本集中添加新的成员的时候,默认的,副本集中的节点会从离它最近的节点复制oplog来同步数据,这个最近的节点可以是primary也可以是拥有最新oplog副本的secondary节点。

    replication(复制):在初始化后这个操作会一直持续的进行着,以保持各个secondary节点之间的数据同步。


    3.2、Oplog大小:

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

    在64位的Linux,Solaris,FreeBSD以及Windows系统上,MongoDB会分配磁盘剩余空间的5%作为oplog的大小,如果这部分小于1GB则分配1GB的空间
    在64的OS X系统上会分配183MB
    在32位的系统上则只分配48MB

    3.3、oplog的增长速度

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


    6:oplog的监控

    ## 查看 oplog 的状态
    shard1:PRIMARY> rs.printReplicationInfo()
    configured oplog size: 1674.7353515625MB
    log length start to end: 102397secs (28.44hrs)
    oplog first event time: Tue Oct 09 2018 18:17:42 GMT+0800 (CST)
    oplog last event time: Wed Oct 10 2018 22:44:19 GMT+0800 (CST)
    now: Wed Oct 10 2018 22:44:23 GMT+0800 (CST

    ## 查看集群 Oplog 使用情况
    shard1:PRIMARY> db.getReplicationInfo()
    {
    "logSizeMB" : 1674.7353515625,
    "usedMB" : 0.33,
    "timeDiff" : 102307,
    "timeDiffHours" : 28.42,
    "tFirst" : "Tue Oct 09 2018 18:17:42 GMT+0800 (CST)",
    "tLast" : "Wed Oct 10 2018 22:42:49 GMT+0800 (CST)",
    "now" : "Wed Oct 10 2018 22:42:52 GMT+0800 (CST)"
    }

    ## 查看集群延迟情况
    shard1:PRIMARY> db.printSlaveReplicationInfo()
    source: 10.100.25.42:27001
    syncedTo: Wed Oct 10 2018 22:40:39 GMT+0800 (CST)
    0 secs (0 hrs) behind the primary

    转载于:https://www.cnblogs.com/duanxz/p/4375252.html

    展开全文
  • MongoDB oplog分析实用程序。 向上读取MongoDB操作日志,直到最后一次操作为止,并按名称空间和操作类型打印每个操作日志条目的计数,最小,最大,平均和总bson大小(以字节为单位)。 这有助于收集对给定应用程序的...
  • MongoDB oplog详解

    2019-02-21 10:02:00
    MongoDB oplog详解 转文 1:oplog简介 oplog是local库下的一个固定集合,Secondary就是通过查看Primary 的oplog这个集合来进行复制的。每个节点都有oplog,记录这从主节点复制过来的信息,这样每个成员都...
    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节点的操作

    为了提高复制的效率,复制集中的所有节点之间会相互的心跳检测(ping)。每个节点都可以从其他节点上获取oplog。

    oplog中的一条操作。不管执行多少次效果是一样的

    5:oplog的大小

    第一次启动复制集中的节点时,MongoDB会建立Oplog,会有一个默认的大小,这个大小取决于机器的操作系统

    rs.printReplicationInfo()     查看 oplog 的状态,输出信息包括 oplog 日志大小,操作日志记录的起始时间。

    db.getReplicationInfo()   可以用来查看oplog的状态、大小、存储的时间范围。

    oplog的大小

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

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

    • 在64位的Linux,Solaris,FreeBSD以及Windows系统上,MongoDB会分配磁盘剩余空间的5%作为oplog的大小,如果这部分小于1GB则分配1GB的空间
    • 在64的OS X系统上会分配183MB
    • 在32位的系统上则只分配48MB

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

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

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

    解决方法:

    数据同步

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

    • initial sync(初始化):这个过程发生在当副本集中创建一个新的数据库或其中某个节点刚从宕机中恢复,或者向副本集中添加新的成员的时候,默认的,副本集中的节点会从离它最近的节点复制oplog来同步数据,这个最近的节点可以是primary也可以是拥有最新oplog副本的secondary节点。
      • 该操作一般会重新初始化备份节点,开销较大
    • replication(复制):在初始化后这个操作会一直持续的进行着,以保持各个secondary节点之间的数据同步。

    initial sync

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

    • 第一种方式就是停止该节点,然后删除目录中的文件,重新启动该节点。这样,这个节点就会执行initial sync
      • 注意:通过这种方式,sync的时间是根据数据量大小的,如果数据量过大,sync时间就会很长
      • 同时会有很多网络传输,可能会影响其他节点的工作
    • 第二种方式,停止该节点,然后删除目录中的文件,找一个比较新的节点,然后把该节点目录中的文件拷贝到要sync的节点目录中

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

     

    6:oplog数据结构

    下面来分析一下oplog中字段的含义,通过下面的命令取出一条oplog:

    db.oplog.rs.find().skip(1).limit(1).toArray()
    • ts: 8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary
    • op:1字节的操作类型
      • "i": insert
      • "u": update
      • "d": delete
      • "c": db cmd
      • "db":声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.')
      • "n": no op,即空操作,其会定期执行以确保时效性
    • ns:操作所在的namespace
    • o:操作所对应的document,即当前操作的内容(比如更新操作时要更新的的字段和值)
    • o2: 在执行更新操作时的where条件,仅限于update时才有该属性

    查看oplog的信息

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

    字段说明:

    • configured oplog size: oplog文件大小
    • log length start to end: oplog日志的启用时间段
    • oplog first event time: 第一个事务日志的产生时间
    • oplog last event time: 最后一个事务日志的产生时间
    • now: 现在的时间

    查看slave状态

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

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

    • source——从库的IP及端口
    • syncedTo——当前的同步情况,延迟了多久等信息

    当我们插入一条新的数据,然后重新检查slave状态时,就会发现sync时间更新了

    参考文章

    转载于:https://www.cnblogs.com/williamjie/p/10410642.html

    展开全文
  • MongoDB oplog

    2014-05-28 07:46:13
    http://francs3.blog.163.com/blog/static/4057672720121133328120/
    http://francs3.blog.163.com/blog/static/4057672720121133328120/
    
    展开全文
  • Flinkx同步mongodb oplog

    2020-11-04 16:58:19
    基于当前现状,引入Flinkx同步mongodboplog来达到近实时同步数据一方面可以减少集群的压力; 此外Flinkx可以监听数据变化及时将数据同步到clickhouse或者kafka中方便做一些近实时的OLAP分析,以及查询。 BUG修复 ...
  • 修改mongodb oplog size

    2016-03-15 17:04:29
    修改mongodb oplog size oplog简介: oplog:operations log的简写,存储在一个特殊的数据库中(local),oplog就存储在其中的oplog.$main集合里面,这个集合是一个固定集合,新操作会自动替换旧的操作
  • MongoDB oplog 的通用处理器,将注册的事务路由到指定的使用者。 它处理类型为插入、更新、删除和命令的操作。 用法 var Moplog = require ( 'moplog' ) ; // Initialize with the location of the nconf config ...
  • 一个示例Express应用程序,用于通过Websocket将MongoDB oplog事件推送到Angular页面。 版本:0.0.3 介绍 这是一个使用Mongo的oplog通过Websocket通知Web客户端有关数据库更改的演示。 安装 您需要安装节点,凉亭和...
  • MongoDB opLog Error?

    2020-12-29 06:49:26
    <p>I assume this is due to the <code>opLog</code> moving quick that <code>monstache</code> was able to catch the changes? Unless there is another possible explanation?</p><p>该提问来源于开源项目ÿ...
  • mongoDB oplog 说明 ts:8字节的时间戳,由4字节unix timestamp + 4字节自增计数表示。这个值很重要,在选举(如master宕机时)新primary时,会选择ts最大的那个secondary作为新primary。op:1字节的操作类型,...
  • MongoDB oplog 详解

    2018-03-19 16:57:00
    oplog简介  oplog是local库下的一个固定集合,Secondary就是通过查看Primary的oplog这个集合来进行复制的。每个节点都有oplog,记录从主节点复制过来的信息,这样每个成员都可以作为同步源给其它节点。  oplog...
  • MongoDB oplog 设置

    千次阅读 2018-09-07 17:16:09
    运行时设置: rs0:PRIMARY&gt; use local switched to db local ... db.oplog.rs.stats().maxSize 1048576000 rs0:PRIMARY&gt; db.adminCommand({replSetResizeOplog:1, size: 16384}) { "...
  • MongoDB oplog剖析

    千次阅读 2015-03-21 11:26:01
    MongoDB 的Replication是通过一个日志来存储写操作的,这个日志就叫做oplog。journal是Mongodb中的redo log,而Oplog则是负责复制的binlog(对应Mysql)。在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这...
  • mongodb oplog和journal

    2018-12-30 16:17:29
    The oplog (operations log) 就是数据库中发生的所有数据修改记录 journal指的是WiredTiger 存储引擎的write-ahead log
  • MongoDB oplog 深入剖析

    2019-06-12 11:53:24
    oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented). oplog的位置 ...
  • MongoDB有一个oplog ,它是所有写入操作的日志。 mongoriver监视对此操作mongoriver更新。 有关更多信息,请参见。 如何使用它 步骤1:建立出口 您需要编写一个子类子类。 您可以覆盖以下任何一种方法: update_...
  • Whit this feature we can decrease the load on the Kafka cluster with large scale MongoDB cluster to filter the events that they are interested in.</p><p>该提问来源于开源项目:debezium/debezium...
  • 查询MongoDB oplog.rs

    2017-11-07 16:31:00
    oplog是Capped Collection,默认分配5%的空闲磁盘空间。 来看下oplog.rs的样子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 rs_test:SECONDARY>uselocal switchedtodblocal r...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 983
精华内容 393
关键字:

mongodboplog