此页面提供了我们遇到的一些常见问题的回答。如果您还有其他问题,请联系 MongoDB 支持部门。
我可以在mongosync 同步时更改负载级别吗?
当mongosync 同步时,我能否对目标集群执行读取或写入操作?
mongosync 在同步期间对从源到目标的写入进行组合和重新排序,并临时修改集合特征。因此,mongosync 无法保证目标在同步运行时的任何时间点与源匹配,包括源的过时版本,即使同步暂停也是如此。要安全地接受目标集群上已迁移集合的流量,请等待迁移到commit 。要学习;了解更多信息,请参阅中间同步注意事项。
mongosync在同步期间对目标集群上的已迁移集合执行写入会导致未定义的行为。默认下, 会阻止对目标集群的写入。要学习;了解有关写入阻塞的更多信息,请参阅写入阻塞和 start。
提交后,只有当canWrite 为true 时,才能安全地写入目标集群上的已迁移集合。要检查 的值,运行canWrite progress端点。
要学习;了解有关同步期间允许的读取和写入的更多信息,请参阅读取和写入。
注意
mongosync 进行同步时,目标集群上的索引构建被视为写入。
我是否可以使用mongosync 在两个MongoDB集群之间进行持续同步?
示例,我是否可以维护用于灾难恢复、分析或其他类似使用案例的从节点(secondary node from replica set)集群?
不可以,mongosync mongosync旨在支持一次性迁移。commit 必须 才能安全地接受目标集群上已迁移集合的读取或写入流量。因此,它不适合用于灾难恢复、分析或其他使用案例。
有关详细信息,请参阅 当mongosync 同步时,我能否对目标集群执行读取或写入操作?。
为什么目标集群索引大于源集群索引?
以下因素可能会导致目标集群上的索引大小增加:
mongosync在迁移期间插入和删除数据,这可能会导致数据在磁盘上存储效率低下。默认下,
mongosync会在复制数据之前构建索引。mongosync按_id顺序复制数据。 如果索引与_id不相关,索引大小可能会变大。 有关更多信息,请参阅MongoDB手册常见问题解答:索引页面。
使用以下方法来缓解索引大小的增加:
mongosync能否在自己的硬件上运行?
是的, mongosync可以在自己的硬件上运行。 mongosync不必在托管 MongoDB 实例的服务器上运行。 当mongosync在自己的硬件上运行时,它可以使用与源集群或目标集群上的操作系统不同的操作系统 (OS)。
目标集群应具有哪些硬件规格?
对于大多数迁移,目标集群的硬件规格应高于源集群,包括以下属性:
CPU
内存
Disk I/O
这些硬件规格确保目标集群可以处理mongosync 写入,并且同步可以跟上源集群的工作负载。
目标集群必须有足够的磁盘存储,以容纳正在迁移的逻辑数据大小以及初始同步中的目标oplog条目。 示例,要迁移10 GB的数据,目标集群必须至少有 10 GB用于数据,另外 10 GB用于初始同步中的插入oplog条目。
要使用嵌入式验证,目标上必须有更大的oplog 。如果启用嵌入式验证程序并减小目标oplog的大小,则嵌入式验证程序可能无法跟上,从而导致 mongosync 出错。
如果需要减少目标oplog条目的开销并且嵌入式验证程序已禁用,则可以:
使用
oplogSizeMB设置来减小目标集群的oplog大小。用于
oplogMinRetentionHours设置来降低或删除目标集群的最短oplog保留期。
oplog我是否应该增加源集群中 的大小?
mongosync 在 集合复制 阶段之后,将源集群上 oplog 中的操作应用于目标集群上的数据。当 mongosync 未应用的操作滚动源集群上的 oplog 时,同步将失败并且 mongosync 退出。
注意
mongosync 不会将同步期间在源集群上进行的applyOps操作复制到目标集群。
如果您预计同步大型数据集,或者计划长时间暂停同步,则可能会超过oplog window 。 使用oplogSizeMB设置增加源集群上oplog的大小。
stringmongosync允许哪些连接字符串选项?
mongosync 需要readConcern: "majority"和writeConcern: "majority"。
如果readConcern不是majority , mongosync将返回错误:
Invalid URI option, read concern must be majority
如果writeConcern不是majority , mongosync将返回错误:
Invalid URI option, write concern must be majority
mongosync 接受所有其他连接string选项。
mongosync 是否支持网络压缩?
mongosync 支持网络压缩并默认启用。但是,您的集群配置必须股票至少一个通用压缩器。
有关网络压缩配置选项的更多信息,请参阅数据库手册中的 --networkMessageCompressors 选项。
支持哪些安全和身份验证选项?
mongosync 使用标准MongoDB连接string连接到源集群和目标集群。
支持LDAP和X 509 。 有关可用的身份验证选项,请参阅在自管理部署上进行身份验证。
mongosync是否会在出错时自动重启?
mongosync 不会在出错时自动重启。 但是,您可以写入脚本或使用操作系统的进程管理器(示例systemd )来重新启动mongosync进程。
mongosync二进制文件是无状态的。 用于重新启动的元数据存储在目标集群上。
如果mongosync在同步期间不可用,则可以恢复mongosync操作。 当mongosync再次可用时,使用相同参数重新启动mongosync进程。 mongosync会在mongosync不可用时从停止处恢复操作。
注意
从mongosync 1.7.3开始, 恢复或重新启动同步操作时, mongosync可能至少需要两分钟才能响应。 在此期间,对progress端点的任何调用都可能失败。 如果progress调用失败,可以安全地重试。
源或目标可以是带有仲裁节点的副本集吗?
是的,副本集可以有仲裁节点。 源副本集必须具有超过2个非仲裁节点,并且您必须从非仲裁节点进行同步。 使用源集群的连接string为非仲裁数据承载节点指定读取偏好。
如果看到慢操作警告怎么办?
在初始同步或应用程序变更事件期间,如果源集群上存在慢速读取操作或目标集群上存在慢速写入操作,则可能会出现慢操作警告。该警告可能表示源集群或目标集群的网络拥塞或资源紧张。
虽然这些警告本身并不表示出现故障,但缓慢的操作可能会导致mongosync操作超时错误和迁移失败。
如果看到慢速运行警告,请检查源集群和目标集群上的 CPU、内存和网络使用情况。 如果集群配置不足以满足您的需求,请考虑升级集群硬件。
如果日志包含“错误”或“失败”字样,我是否应该停止迁移?
不会,包含“错误”或“故障”字样的日志显示的是非致命错误,并不表示您需要提前停止mongosync 。 这些日志并不表明mongosync正在发生故障或正在损坏数据。 如果发生致命错误, mongosync会停止同步并写入致命错误日志条目。
如果我在日志中看到大量重复键错误怎么办?
重复密钥错误是同步进程中的正常现象。 在以下情况下,可能会出现这些错误:
mongosync启动后,您可以在源集群上插入文档。mongosync可以直接复制文档,并稍后冗余地应用该文档的插入更改事件。停止并恢复
mongosync。 这可能会导致mongosync重新启动时出现重复插入。mongosync遇到暂时性错误,并重新尝试可能已经成功的插入操作。
如果 mongosync 返回致命错误,我该怎么办?
致命错误表示必须更正并需要重新启动迁移的问题。 解决错误后,删除目标集群上的所有迁移数据,包括mongosync_reserved_for_internal_use数据库。 然后,重新启动mongosync并开始新的迁移。
mongosync是否支持TTL索引?
Mongosync 支持将TTL索引从源集群同步到目标集群。
同步到分片集群时,是否可以自定义数据块分布?
不可以,您无法配置 mongosync 以在目标分片集群上自定义数据块分布。 mongosync 在初始化期间对每个集合进行采样,以确定迁移后如何在目标集群的分片之间有效地分发文档。