oplog 大小调整
mongosync程序使用变更流在源集群和目标集群之间同步数据。 mongosync
不直接访问权限oplog ,但当变更流返回过去的事件时,这些事件必须在oplog
时间范围。
mongosync
将源集群oplog
中的操作应用于目标集群上的数据。 当mongosync
未应用的操作滚动源集群上的oplog
时,同步将失败并且mongosync
退出。
注意
mongosync
不会将同步期间在源集群上进行的applyOps
操作复制到目标集群。
在初始同步期间,由于会同时复制文档, mongosync
可能会以较慢的速度应用操作。 初始同步后, mongosync
可以更快地应用更改,并且更有可能在oplog
中保持接近源集群上发生的实时写入的位置。
如果您预计同步大型数据集,或者计划长时间暂停同步,则可能会超过oplog window 。 使用oplogSizeMB
设置增加源集群上oplog
的大小。
Considerations
目标集群必须有足够的磁盘存储,以容纳正在迁移的逻辑数据大小以及初始同步中的目标oplog条目。示例,要迁移10 GB的数据,目标集群必须至少有 10 GB用于数据,另外 10 GB用于初始同步中的插入oplog条目。
要减少目标oplog条目的开销,您可以:
使用
oplogSizeMB
设置来减小目标集群的oplog大小。用于
oplogMinRetentionHours
设置来降低或删除目标集群的最短oplog保留期。
监控初始同步所需的 oplog 大小
确定 oplog window
要获取oplog
运行db.getReplicationInfo()
中第一个条目和最后一个条目之间的秒数差异。 如果要复制分片集群,请在每个分片上运行该命令。
db.getReplicationInfo().timeDiff
返回的值是集群的最小oplog
窗口。 如果有多个分片,则最小的数字是最小oplog
窗口。
确定 mongosync 复制延迟
要获取lagTimeSeconds
值,请运行/progress命令。 延迟时间是指mongosync
应用的最后一个事件与源集群上的当前最新事件的时间之间的时间(以秒为单位)。
它用于衡量落后于源集群mongosync
的程度。
验证 oplog 大小
如果延迟时间接近最小oplog
窗口,请进行以下更改之一:
增大
oplog
窗口。 使用replSetResizeOplog
将minRetentionHours
设置为大于当前oplog
窗口。扩展
mongosync
实例。 添加 CPU 或内存以纵向扩展mongosync
节点,使其具有更高的复制速率。
注意
同步期间,复制延迟的oplog窗口和变化率可能会发生变化。 在迁移过程中重复这些步骤以监控进度。