MongoDB 6.0 引入新的迁移工具 MongoSync

原创 精选
开发 前端
MongoSync 是引入 MongoDB 6.0 的一个新的迁移工具,用于在不同 MongoDB 部署之间进行数据迁移。它取代了之前的 mongoexport 和 mongoimport,以及 mongodump 和 mongorestore 的部分功能,提供了更为高效和安全的数据迁移体验。

作者 | 吴守阳

审校 | 重楼

速览

1、主要特点

2使用场景

3限制

4注意事项

5连接方式

6使用方法

7参数详解

8总结

MongoSync 是引入 MongoDB 6.0 的一个新的迁移工具,用于在不同 MongoDB 部署之间进行数据迁移。它取代了之前的 mongoexportmongoimport,以及mongodumpmongorestore 的部分功能,提供了更为高效和安全的数据迁移体验。

1、主要特点

  • 实时数据迁移:MongoSync 支持实时数据迁移,可以在源和目标数据库之间同步数据更改,确保数据的一致性和实时性。
  • 增量迁移:它能够进行增量数据迁移,这意味着在初次迁移完成后,只迁移自上次迁移以来的更改,减少了数据传输量和迁移时间。
  • 断点续传:MongoSync 具备断点续传功能如果迁移过程中出现中断,可以从中断的地方继续迁移,避免了完全重新开始的需要。
  • 数据验证:在迁移过程中,MongoSync 会进行数据验证,确保迁移后的数据与源数据一致。
  • 多线程和并发处理:MongoSync 支持多线程和并发处理,可以利用多核CPU并行处理数据,提高迁移效率。
  • 安全性和加密:在数据迁移过程中,MongoSync 可以使用加密通道,保护数据在传输过程中的安全。

2、使用场景

  • 数据中心迁移:当需要将数据从一个数据中心迁移到另一个数据中心时。
  • 云迁移:将本地部署的 MongoDB 数据迁移到云服务提供商(如 MongoDB Atlas)。
  • 数据库升级:在进行版本升级或架构调整时,将数据从旧部署迁移到新部署。
  • 数据备份和恢复:作为数据备份策略的一部分,定期将数据迁移到备用数据库。

3、限制

  • 目标集群必须为空。
  • MongoSync 不验证集群或环境是否正确配置。
  • MongoSync 运行期间,其他客户端不应向目标集群写入数据。
  • 如果禁用了写入阻塞,用户在开始提交过程前必须阻止对源集群的写入。
  • 不复制 system.* 类型的集合。
  • 不支持字段名以美元符号 ($) 开头的文档。
  • 不支持 MongoDB 无服务器(Serverless)集群。
  • 不支持 MongoDB 共享层(Shared Tier)。
  • 不支持可查询加密(Queryable Encryption)。
  • 无法同步在相同字段上同时定义了唯一索引和非唯一索引的集合。
  • 在尝试使用 MongoDB Atlas 集群前,应禁用“所有查询都需要索引”选项(M10+)。
  • MongoSync 不同步用户或角色。
  • MongoSync 不复制在源集群上进行的 applyOps 操作至目标集群。
  • MongoSync 必须使用主读取偏好从源集群读取数据。
  • MongoSync 不支持同步 Atlas Search 索引。
  • MongoSync 仅支持使用 WiredTiger 存储引擎的集群。

MongoDB 社区版

MongoDB 不测试社区版的集群间同步,并且在大多数情况下,不为社区部署提供集群间同步的支持。若想在 MongoDB 社区版中使用集群间同步,需联系 MongoDB 销售代表讨论需求和定制化选项。

不支持的集合类型

  • 时间序列集合不受支持。
  • 设置了 expireAfterSeconds 的聚类集合不受支持。

分片集群

  • MongoSync 不支持从分片集群到复制集的同步。
  • 从复制集到分片集群的同步有以下限制:
  1. 在同步过程中,MongoSync 允许用户重命名 sharding.shardingEntriesStart 命令选项中包含的集合。
  2. 在同步过程中使用 sharding.createSupportingIndexes 选项创建支持分片键的索引后,不能在源集群上创建这些索引。
  3. 在一个集合内,_id 字段在集群所有分片上必须是唯一的。
  4. 同步期间不能使用 movePrimary 命令重新分配主分片。
  5. 区域配置不会被复制,MongoSync 只复制数据,不继承区域。
  6. 同步过程中不能添加或移除分片。
  7. MongoSync 仅同步所有分片上存在的索引。
  8. MongoSync 仅同步所有分片上具有一致索引规范的索引。
  9. 必须在整个迁移期间停止源和目标分片集群的平衡器。
  10. 同步过程中不得在源或目标集群上运行 moveChunkmoveRange 命令。
  11. 同步期间不能细化分片键或使用 reshardCollection 修改分片键。

反向同步

  • 若旧源集群上的唯一索引部分分布在分片上,反向同步可能会导致失败,确保反向前所有分片上有唯一索引。
  • 源和目标集群的分片数量必须相同,不同拓扑或主要版本的集群无法反向同步。

多个集群

  • MongoSync 不支持将多个源集群同步到单一目标集群。
  • 一个集群不能同时作为 MongoSync 的源集群和目标集群。

过滤同步

  • 过滤不支持反向同步。
  • 开始前目标集群中不应包含用户数据。
  • 开始前目标集群中不应包含系统数据库。
  • 不能修改正在使用的过滤器,要创建新过滤器,参考替换现有过滤器。
  • 只能在特定情况下重命名集合。
  • 如果过滤器包含视图但不包含基础集合,只有视图元数据会被同步到目标集群。
  • 过滤器中不能指定系统集合或系统数据库。
  • 使用 $out 聚合阶段或 mapReduce 命令(设置为创建或替换集合)时,必须配置过滤器以使用整个数据库,不能限制过滤器到数据库内的集合。

限制集合

  • 自1.3.0版本起,集群间同步支持限制集合,但有一些限制。
  • convertToCappedcloneCollectionAsCapped 不受支持。
  • 源集群上的限制集合在同步期间正常工作。
  • 目标集群上的限制集合在同步期间会有临时变化,没有文档数量的最大限制,最大集合大小为1PB,MongoSync 在提交时恢复原始的最大文档数量和最大文档大小。

4、注意事项

当源集群或目标集群为分片集群时,停止 balancer,并且不要在整个生命周期内运行 moveChunkmoveRange 命令 迁移。要停止均衡器,请运行 balancerStop 命令并等待命令完成。

5、连接方式

SRV 连接方案的形式为:

mongodb+srv://[username:password@][host.domain.TLD][:port][/defaultauthdb][?options]

标准 URI 连接方案的格为:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

在使用MongoSync 进行集群间同步时,正确的连接字符串是至关重要的。无论是使用 SRV 还是标准 URI 方案,你都需要确保提供足够的信息来准确地连接到源和目标集群。对于复制集,直接指定 mongod 实例;而对于分片集群,则应指定mongos 实例。通过遵循这些指南,你可以确保MongoSync 正确地初始化并执行数据同步。

6、使用方法

MongoSync 集群到集群:

shard01迁移
mongosync \
 --cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
 --cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
 --id shard01 --port 27181 

shard02迁移
mongosync \
 --cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
 --cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
 --id shard02 --port 27182

shard03迁移
mongosync \
 --cluster0 "mongodb://clusterAdmin:superSecret@clusterOne01.fancyCorp.com:27500,clusterOne02.fancyCorp.com:27500,clusterOne03.fancyCorp.com:27500" \
 --cluster1 "mongodb://clusterAdmin:superSecret@clusterTwo01.fancyCorp.com:27500,clusterTwo02.fancyCorp.com:27500,clusterTwo03.fancyCorp.com:27500" \
 --id shard03 --port 27183

检查进度

curl mongosync01Host:27181/api/v1/progress -XGET

暂停实例MongoSync

curl mongosync01Host:27181/api/v1/pause -XPOST --data '{}'

恢复同步

curl mongosync01Host:27181/api/v1/resume -XPOST --data '{}'

mongosync01Host为创建mongosync的实例地址

7、参数详解

--cluster0 value

用于指定第一个集群的URI,该集群可以作为数据源或目标。

--cluster1 value

用于指定第二个集群的URI,同样可以作为数据源或目标。

--verbosity value

设置日志的详细程度级别,可选值包括:TRACE, DEBUG, INFO, WARN, ERROR, FATAL, PANIC(默认值为 DEBUG)。

--logPath DIRECTORY

指定日志输出的目录路径。

--port value

设置HTTP API服务器的端口号(默认值为 27182)。

--id value

当使用多个 mongosync 实例时,该标志应设置为 mongosync 将负责追踪的源分片ID。如果仅使用单个 mongosync 实例,则不应设置此标志。

--config value

指定配置文件的路径。

--version, -v

打印 mongosync 的版本信息。

--disableTelemetry

如果设置,将禁用遥测跟踪(默认值为 false)。

--loadLevel value

控制内部并行度参数的数字,范围从 1(最小并行度)到 4(最大并行度)(默认值为 3)。

总结

MongoSync 是 MongoDB 6.0 提供的一种强大且灵活的数据迁移工具,它简化了数据迁移的过程,提高了迁移的效率和安全性,是进行数据库迁移项目的理想选择。如果你正计划进行数据迁移,MongoSync 值得考虑。不过,在使用之前,建议先在测试环境中试验,以熟悉其操作流程并评估其性能影响。

作者介绍

吴守阳,51CTO社区编辑,拥有8年DBA工作经验,熟练管理MySQL、Redis、MongoDB等开源数据库。精通性能优化、备份恢复和高可用性架构设计。善于故障排除和自动化运维,保障系统稳定可靠。具备良好的团队合作和沟通能力,致力于为企业提供高效可靠的数据库解决方案。

责任编辑:华轩 来源: 51CTO
相关推荐

2023-08-11 08:34:40

开发工具

2009-11-23 19:50:12

PHP6.0

2014-05-14 11:46:54

服务器应用应用迁移AppZero

2023-03-16 08:01:43

CephWeb

2021-05-12 09:00:04

微软 Windows Linux

2013-10-28 14:05:05

StartOSStartOS 6.0

2021-11-15 16:09:07

微软Windows 11命令行

2017-06-15 14:16:39

2022-02-11 21:01:18

GoNetip网络库

2009-02-09 09:38:41

新特性MySQL 6.0MySQL

2019-01-25 19:19:28

数据工具互联网

2020-10-12 09:38:46

iPhone数据迁移苹果

2020-08-11 11:08:24

云端云计算业务迁移

2020-05-14 17:41:40

Redis 6.0多线程数据库

2011-10-09 14:50:27

MongoDB

2011-07-15 10:01:02

Active DireADMT

2012-08-06 15:59:17

MongoDB

2020-04-20 08:08:23

MongoDBElasticsear数据库

2021-08-22 17:27:50

KDE PlasmaWindows概览效果

2019-03-26 09:41:57

iOS应用系统
点赞
收藏

51CTO技术栈公众号