mongosync 程序使用变更流在源集群和目标集群之间同步数据。mongosync 不直接访问oplog,但当变更流返回过去的事件时,这些事件必须在 oplog 时间范围内。
mongosync 将源集群oplog中的操作应用于目标集群上的数据。 当mongosync未应用的操作滚动源集群上的oplog时,同步将失败并且mongosync退出。
注意
mongosync 不会将同步期间在源集群上进行的applyOps操作复制到目标集群。
在初始同步期间,由于会同时复制文档, mongosync可能会以较慢的速度应用操作。 初始同步后, mongosync可以更快地应用更改,并且更有可能在oplog中保持接近源集群上发生的实时写入的位置。
如果您预计同步大型数据集,或者计划长时间暂停同步,则可能会超过oplog window 。 使用oplogSizeMB设置增加源集群上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窗口和变化率可能会发生变化。 在迁移过程中重复这些步骤以监控进度。