翻译:MongoDB副本集--Oplog

2018-01-29  本文已影响0人  ChanZeeBm

原文

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.

上一篇下一篇

猜你喜欢

热点阅读