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