美文网首页
翻译:MongoDB副本集--Oplog

翻译:MongoDB副本集--Oplog

作者: ChanZeeBm | 来源:发表于2018-01-29 23:16 被阅读0次

    原文

    oplog是一个特殊的上限集合,里面记录着你数据库里面的所有操作。
    MongoDB在 primary成员中接受相关操作并且把这些操作记录在主服务器的oplog里。然后备份服务器在异步线程中复制且应用这些操作在自己身上。为了维护数据库的当前状态,副本集里的所有成员都有一份oplog的copy,且记录在local.oplog.rs集合中。

    为了复制的便利性,所有副本集成员都与其他成员保持心跳链接,且所有副本集成员都可以将另外成员的oplog完全导入到自己的oplog。

    在oplog的每一个操作都是幂等的。也就是说,无论是对目标数据集应用一次或者多次,oplog都会生成相同的结果。

    oplog的大小:

    The default oplog size depends on the storage engine:

    For Unix and Windows systems

    Storage Engine Default Oplog Size Lower Bound Upper Bound
    In-Memory Storage Engine 5% of physical memory 50 MB 50 GB
    WiredTiger Storage Engine 5% of free disk space 990 MB 50 GB
    MMAPv1 Storage Engine 5% of free disk space 990 MB 50 GB

    For 64-bit macOS systems

    Storage Engine Default Oplog Size
    In-Memory Storage Engine 192 MB of physical memory
    WiredTiger Storage Engine 192 MB of free disk space
    MMAPv1 Storage Engine 192 MB of free disk space

    大多数情况下,默认的oplog大小是够用的。比如,5%的磁盘剩余空间可以记录24小时的操作记录,那么备份服务器就可以24小时内不从oplog里面复制操作记录从而避免数据太旧的问题。然而,大多数的副本集都不会出现这么极端的情况,他们的oplog可以容纳更多的操作。

    在mongod建立oplog之前,你可以利用 oplogSizeMB选项来指定oplog的大小。一旦你已经新建了一个副本集成员,你可以用 replSetResizeOplog这个命令来改变oplog的大小。 replSetResizeOplog允许你动态改变oplog的大小而不用重启mongod进程。

    可能需要一个更大的oplog大小的负载情况

    如果你的副本集可能出现以下情况,你可能需要一个比默认size更大的oplog。相反,如果你只是主要执行查询和小部分写操作,一个更小的oplog可能会更合适。

    可能需要一个比默认size更大的oplog的情况:

    1. 一次过update所有文档
      为了维护幂等性,oplog必须将多个操作转换为单个操作。该操作可以用更大size的oplog换取相应的磁盘大小。

    2. 删除的操作次数等同于插入操作次数
      如果你的删除操作约等于你的插入操作次数,数据库不会显著的增加你的磁盘占用,但oplog的大小可以很大很大。

    3. 大量的就地更新
      如果很大一部分的负载是更新操作并且该操作不会增加文档的大小,数据库会记录大量的操作,但不会改变磁盘中的数据量。

    oplog的状态

    要查看包含大小,时间范围的oplog状态,使用rs.printReplicationInfo()方法。获取更多的oplog状态的信息,查看 Check the Size of the Oplog.

    相关文章

      网友评论

          本文标题:翻译:MongoDB副本集--Oplog

          本文链接:https://www.haomeiwen.com/subject/dynfzxtx.html