警告
mongosync 不检查是否符合记录的限制条件。请确保您的应用程序不受这些限制的影响。在存在这些限制之一的情况下运行 mongosync,可能会导致对目标集群出现未定义的行为。
您必须在整个迁移期间遵守这些限制,包括迁移暂停或停止时(如果要恢复迁移)。
一般限制
注意
有关MongoDB 服务器兼容性的信息,请参阅 MongoDB Server版本兼容性。
mongosync不支持在迁移期间更改主要版本或次要版本的就地服务器版本升级。mongosync允许补丁版本升级。要学习;了解更多信息,请参阅服务器升级说明。目标集群必须为空。
mongosync不验证集群或环境是否已正确配置。当
mongosync运行时,其他客户端不得写入目标集群。如果要启动提交进程,并且在使用
enableUserWriteBlocking"sourceAndDestination"start端点时未将 设立为 ,则必须在启动提交进程之前阻止写入源集群。不会复制 system.* 集合。
不支持字段名以美元符号 (
$) 为前缀的文档。请参阅带句点和美元符号的字段名。不支持无服务器集群。
不支持 MongoDB 共享层级。
不支持“可查询加密”。
您无法同步已在相同字段定义唯一索引和非唯一索引的集合。
在尝试使用
M10+Atlas 集群运行mongosync之前,请禁用 Require Indexes for All Queries(需要所有查询的索引)选项。mongosync不会同步用户或角色。mongosync不会将同步期间在源集群上进行的applyOps操作复制到目标集群。mongosync必须使用primary读取偏好从源集群读取。mongosync不支持当前正在升级 MongoDB 版本的源集群或目标集群。mongosync不支持同步Atlas Search 索引。mongosync仅支持使用WiredTiger存储引擎的集群。您无法将集合与任何具有空时间戳的文档同步,例如 6.0 之前的
Timestamp(0,0)源集群。mongosync不支持具有重复字段名称的文档。 有关详细信息,请参阅MongoDB不支持重复的字段名称。
MongoDB Community Edition
MongoDB不会使用社区版本测试 Mongosync,并且在大多数情况下, MongoDB不支持使用社区部署的 Mongosync。如果您想将 Mongosync 与MongoDB Community Edition一起使用,联系MongoDB销售代表,讨论要求和个性化选项。
不支持的集合类型
不支持时间序列集合。
不支持设置了 expireAfterSeconds 的集群化集合。
分片集群
mongosync不支持从分片集群同步到副本集。mongosync不支持同步到具有一个或多个仲裁节点的分分片集群拓扑结构。mongosync不支持与全局集群同步或从全局集群同步。从副本集同步到分片集群这一操作具有以下限制:
mongosync允许用户重命名同步期间sharding.shardingEntries选项包含的集合,但有一些限制。 有关详细信息,请参阅在同步期间重命名。如果使用
sharding.createSupportingIndexes选项,则在同步期间会在目标集群上自动创建索引。 此后无法在源集群上创建这些索引。如果要手动创建索引以支持分分片键,则必须在
mongosync启动之前或迁移完成且mongosync停止之后创建索引。
在集合中,
_id字段必须在集群的所有分片中都是唯一的。请参阅分片集群和唯一索引了解详情。同步时,不能使用
movePrimary命令重新分配主节点分片。没有用于区域配置的复制。
mongosync复制数据,但不继承区域。同步时无法添加或删除分片。
mongosync只同步存在于所有分片上的索引。mongosync只同步所有分片上具有一致索引规范的索引。注意
如要检查索引是否存在不一致,请参阅跨分片查找不一致的索引。
如果源集群或目标集群是分片集群,并且您未运行带命名空间筛选的
mongosync,则必须通过运行balancerStop命令并等待15 分钟让命令完成来禁用源集群的负载均衡器。如果源集群或目标集群是分片集群,并且您正在运行带有命名空间筛选的
mongosync,则可以全局启用源集群的负载均衡器,但必须为命名空间过滤内的所有集合禁用它。请参阅在 Filtered Sync 中禁用集合的负载均衡器。您还可以完全禁用源集群的负载均衡器。如果您已启用源集群的负载均衡器,但对命名空间过滤内的集合禁用了它,请勿对命名空间过滤内的集合运行
shardCollection。如果在迁移期间对命名空间过滤内的集合运行shardCollection,则mongosync会返回错误并停止,这需要您从头开始迁移。mongosync不支持在执行期间运行命令transitionFromDedicatedConfigServer。同步时无法完善分片键。
同步期间不支持源集群的
reshardCollection操作。每个分片集合的最大索引数为 63 个,比默认限制(64 个)少一个。
mongosync只支持同步具有默认排序规则设置的分片集合。
反转
多个集群
mongosync不支持将多个源集群同步到一个目标集群。一个集群不能同时是一个
mongosync实例中的源集群和另一个mongosync实例中的目标集群。
已筛选同步
可逆同步不支持筛选功能。
启动前,目标集群不能包含用户数据。
目标集群在启动前不能包含
mongosync_reserved_for_internal_use系统数据库。不能修改正在使用的筛选器。如需创建新的筛选器,请参阅:“替换现有筛选器”。
您只能在某些情况下重命名集合。有关更多详情,请参阅:添加和重命名集合。
如果过滤器包含视图但不包含基本集合,则只有视图元数据会同步到目标集群。要包含视图文档,您还必须同步基本集合。
不能在筛选器中指定系统集合或系统数据库。
如需使用带有过滤功能的
$out聚合阶段或mapReduce命令(当设置为创建或替换集合时),必须将过滤器配置为使用整个数据库。不能将过滤器限制在数据库内的集合上。有关更多信息,请参阅使用 mapReduce 和 $out 进行筛选。
固定大小集合
从 1.3.0 开始,Mongosync 支持固定大小集合,但有一些限制。
不支持
convertToCapped。如果运行convertToCapped,则mongosync会退出并显示错误。cloneCollectionAsCapped不受支持。
同步期间,源集群上的固定大小集合可正常工作。
同步期间,目标集群上的固定大小集合会出现临时更改:
文档数量没有上限。
最大集合大小为 1PB。
mongosync 在提交期间恢复最大文档数量和最大文档大小的原始值。
系统集合
Mongosync 不会将系统集合复制到目标集群。
如果您对源集群发出 dropDatabase 命令,此更改不会直接应用于目标集群。相反,Mongosync 会删除目标集群上数据库中的用户集合和视图,但不会删除该数据库上的系统集合。
例如,在目标集群上:
删除操作不会影响用户创建的
system.js集合。如果您启用分析,则
system.profile集合将保留。如果您在源集群上创建视图,然后删除数据库,则复制该删除操作将删除视图,但会留下一个空的
system.views集合。
在这些情况下,复制 dropDatabase 时会删除数据库中所有用户创建的集合,但会将其系统集合留在目标集群上。
滚动索引构建
mongosync 不支持迁移期间的滚动索引构建。为避免在迁移期间以滚动方式构建索引,请使用以下方法之一确保目标索引与源索引匹配:
迁移前在源上构建索引。
迁移后在目标上构建索引。
嵌入式验证程序
从 1.9 开始,mongosync 可以使用嵌入式验证器来确认集合从源集群成功同步到目标集群。
兼容性
嵌入式验证程序在 mongosync 1.8 及更早版本中不可用。
限制
嵌入式验证程序具有以下限制:
mongosync将验证者状态存储在内存中,这可能会导致大量内存开销。 要运行验证程序,mongosync大约需要 10 GB内存,此外,每 1 万份文档需要额外 500 MB 内存。验证程序无法恢复。 如果用户停止或暂停同步,然后因任何原因再次启动
mongosync,验证进程将从头开始。 这可能会导致验证大大落后于迁移。如果在启用验证并将
buildIndexes设立为never的情况下开始同步,则当mongosync在源集群上找到TTL集合时,迁移将失败。 这种情况可能发生在您调用/start端点之后或更晚的时间,例如,用户在迁移过程中在源集群上创建了TTL索引。
不支持的验证检查
验证程序不会检查以下命名空间:
固定大小集合
具有TTL索引的集合,包括在迁移过程中添加或删除的TTL索引
不使用默认的集合
视图
验证程序不会检查以下集合功能:
集合元数据
索引
要验证上述数据和元数据,请为这些集合和集合功能编写额外检查的脚本。 有关详细信息,请参阅验证数据传输。
注意
从版本1.10 开始,验证程序会检查 之前版本上发生的 DDL事件是否存在数据不一致。6.0迁移期间的源集群。 这是因为 6.0 迁移不支持DDL 事件。
要学习;了解更多信息,请参阅 6.0之前的迁移限制。
持久查询设置
mongosync 不会迁移MongoDB 8.0 中引入的持久查询设置 (PQS)。如果源集群使用 PQS,则必须手动迁移。
6.0 之前的迁移
从 1.10 开始,mongosync 支持运行早于 6.0 的MongoDB服务器版本的源集群进行迁移。 有关支持的迁移路径的信息,请参阅MongoDB Server版本兼容性。
以下限制应用于 6.0 迁移:
迁移期间,源集群上不能执行会产生 DDL 事件的写入操作。以下事件不会发生:
collModcreatecreateIndexesdropdropDatabasedropIndexesrefineCollectionShardKeyrenamereshardCollectionshardCollection
这包括可能创建新集合的操作,例如
mapReduce、$out和$merge。这还包括从插入中隐式创建的集合。 在迁移期间,只能进行会产生增删改查事件的写入操作。geoHaystack不支持索引。不支持 /reverse 端点。您无法在
reversible/start请求中启用 选项。您无法在
/start请求中将enableUserWriteBlocking选项设立为"sourceAndDestination",因此不支持双重写入阻塞。 支持仅目标写入阻塞。 确保在调用/commit端点后不对源集群进行任何写入。如果一个或多个分片上存在规格不一致或缺失的索引,
mongosync将返回错误。要检查索引是否存在不一致,请参阅查找分片间不一致的索引。源集群不能有孤立文档。要清理所有孤立文档,请在源集群上运行
cleanupOrphaned命令。