限制
警告
mongosync
不检查是否符合记录的限制条件。请确保您的应用程序不受这些限制的影响。在存在这些限制之一的情况下运行 mongosync
,可能会导致对目标集群出现未定义的行为。
一般限制
注意
有关 MongoDB Server 兼容性的信息,请参阅 MongoDB Server 版本兼容性。
目标集群必须为空。
mongosync
不验证集群或环境是否已正确配置。当
mongosync
运行时,其他客户端不得写入目标集群。如果禁用了写入阻止,则客户端必须先阻止写入到源集群,然后才能启动提交过程。
不会复制 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
允许用户重命名同步期间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
时会删除数据库中所有用户创建的集合,但会将其系统集合留在目标集群上。