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