Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

迁移 mongomirror

在此页面上

  • 先决条件
  • 升级路径
  • 立即下载 mongomirror
  • mongomirror 处理
  • 运行 mongomirror
  • 切换到 Atlas
  • 监控
  • 性能
  • 事务语法, Options, and Examples
  • 故障排除

mongomirror 是一个工具,用于将数据从现有的 MongoDB 副本集手动迁移到 MongoDB Atlas 副本集。mongomirror 不要求您关闭现有副本集或应用程序,也不导入用户、角色数据或复制 config 数据库。

mongomirror 用于:

  • 将数据集从 MongoDB Atlas 外部托管的 MongoDB 部署 一次性迁移到 MongoDB Atlas 集群。

  • 将数据集从一个 Atlas 集群一次性迁移到一个 Atlas 集群。

另请参阅选择数据导入和迁移工具

  • 源 MongoDB 部署必须是副本集。如果源是独立运行的 MongoDB 部署,则在运行 mongomirror 之前, 应将独立运行转换为副本集

  • 源副本集必须运行 2.6 或更高版本的 MongoDB。

  • 源MongoDB副本集不能是 M0 免费集群或 M2/M5共享集群。

  • 源MongoDB副本集不能包含时间序列集合中的数据。

  • 在此过程中,始终请勿更改 featureCompatibilityVersion 标志。

  • 从 MongoDB 4.4 或更早版本迁移到运行 MongoDB 5.0 或更高版本的 Atlas 集群时,请从集合中删除任何 geoHaystack 索引

  • mongomirrorTTL 索引不兼容。删除所有现有 TTL 索引,并在迁移流程完成后重建它们。如果因其对查询性能十分重要而不想删除现有索引,则请 联系支持人员 以了解备用选项。

  • 在迁移过程中,不要对命名空间进行任何更改,例如使用 renameCollection 命令或执行包含 $out 聚合阶段的聚合管道。

  • 您不能将 renameCollection 命令或 $out 聚合阶段用作初始同步的一部分,初始同步作为 mongomirror 进程的一部分运行。

  • 在迁移的初始同步阶段,不得重新启动主节点。

  • 如果 MongoDB 部署包含的索引的键值超过索引键值限制,则在启动实时迁移之前修改索引,使其不包含过大的键值。

mongomirror 必须具有源副本集的网络访问权限。如果源副本集需要身份验证,则须在运行 mongomirror 时包含用户档案。您必须指定至少具有以下特权的数据库用户:

如果不存在这样的用户,请在源 MongoDB 副本集中创建该用户。不同的 MongoDB 服务器版本有不同的内置角色。根据 MongoDB Server 版本选择内置角色,然后在 mongosh: 中运行相应命令:

  • 对于源集群,用户必须拥有 readAnyDatabaseclusterMonitorbackup 角色。

    要验证将运行实时迁移过程的数据库用户是否具有这些角色,请在 admin 数据库上运行 db.getUser() 命令。

    use admin
    db.getUser("admin")
    {
    "_id" : "admin.admin",
    "user" : "admin",
    "db" : "admin",
    "roles" : [
    {
    "role" : "backup",
    "db" : "admin"
    },
    {
    "role" : "clusterMonitor",
    "db" : "admin"
    }
    {
    "role" : "readAnyDatabase",
    "db" : "admin"
    }
    ]
    } ...

    此外,源集群的数据库用户必须具有读取 admin 数据库的 oplog 的角色。如需了解更多信息,请参阅 Oplog 访问权限

  • 对于运行 MongoDB 3.4 的源集群,用户至少必须拥有 clusterMonitorreadAnyDatabase 角色。例如:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "clusterMonitor", "readAnyDatabase" ]
    }
    )
  • 对于运行 MongoDB 3.2 的源集群,用户必须至少拥有 clusterManagerreadAnyDatabase 角色,以及对 local 数据库的读取权限。为此,需要一个自定义角色,而您可使用以下命令创建该角色:

    use admin
    db.createRole(
    {
    role: "migrate",
    privileges: [
    { resource: { db: "local", collection: "" }, actions: [ "find" ] }
    ],
    roles: ["readAnyDatabase", "clusterManager"]
    }
    )
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "migrate" ]
    }
    )
  • 对于运行 MongoDB 2.6 或 3.0 的源集群,用户必须至少拥有 readAnyDatabase 角色。例如:

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "readAnyDatabase" ]
    }
    )

目标 Atlas 部署:

  • 不能是 M0 免费集群、M2M5 共享集群。

  • 不能是无服务器实例。

  • 必须是副本集。

  • 必须采用与源集群 MongoDB 版本相同或更高的版本。请参阅升级路径

  • 不得包含任何与源集群重叠的命名空间。如果 mongomirror 在目标集群上检测到重叠的命名空间,它则会在启动此流程之前失败。如果目标集群包含重叠的命名空间,请使用 --drop 从目标集群中删除所有数据,或是使用 --includeNamespace 列出要从源集群导入的命名空间。

  • 必须在其 IP 访问列表中包含以下任一对象:

    • 运行 mongomirror 的服务器的公共 IP 地址,或是

    • 如果设置为 VPC 对等互连,则为对等方的 VPC CIDR 区块(或子集) 或对等 VPC 的安全组。

    注意

    要查找集群中任何节点的公共 IP 地址,请从命令行使用 nslookup 工具。要了解更多信息,请参阅 Atlas 集群的公网 IP 是否有变化?

mongomirror 必须具有目标集群的网络访问权限。

必须指定具有 Atlas admin 角色的数据库用户才能运行 mongomirror。要了解更多信息,请参阅添加数据库用户

重要

mongomirrorMongoDB6.0 + 源集群和6.0 + 目标集群之间的迁移不支持mongomirror 。您不能使用 从源副本集6 迁移。0 .x 或更高版本迁移到目标副本集6 0。 .x 或更高版本。

您可以使用mongomirror 从以前版本上的源副本集迁移到MongoDB版本6.0 的目标副本集。

或者,您可以将源副本集升级到6.0.17 + 或7.0.13 +,并使用此实时迁移步骤将升级的副本集迁移到Atlas。

mongomirror 支持以下迁移路径。

Source Replica Set
MongoDB Version
Target Atlas Replica Set
MongoDB Version
5.0
6.0
4.4
6.0
4.2
6.0
4.0
6.0
3.6
6.0
3.4
6.0
3.2
6.0
3.0
6.0
2.6
6.0

注意

在 macOS 64位上,下载mongomirror文件后首次尝试打开时,会显示安全警报。 要继续,请参阅 通过覆盖安全设置打开应用。

当您启动 mongomirror 时,它会:

  1. 通过 TLS/SSL 连接到 Atlas。

  2. 执行初始同步,将现有 MongoDB 副本集中的集合复制到 Atlas 中的目标集群。

  3. 在初始同步之后,持续跟踪副本集的oplog以获取传入的更改,并在Atlas中的目标集群上重放这些更改。mongomirror config不会复制mongomirror 数据库。如果您在源集群或目标集群上启用线路压缩,则--compressors 会使用线路压缩,并使用 指定允许使用哪些压缩库。

    mongomirror会在前台的目标集群上构建所有索引,而无论索引是如何在源集群上构建的。前台索引构建会区块对数据库的所有其他操作。要学习;了解更多信息,请参阅对已填充集合的索引构建操作。

一旦启动,mongomirror 就会持续运行,直到关闭为止:

1

如果源副本集需要身份验证,您必须在运行 mongomirror 时包含用户凭证。有关要求,请参阅源副本集所需的访问权限。

请记下该用户的用户名和密码,因为运行 mongomirror 时必须指定这些档案。

2
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Security 标题下的 Database Access

    显示数据库访问页面。

3

必须指定具有 Atlas admin 角色的数据库用户才能运行 mongomirror。有关创建数据库用户的文档,请参阅添加数据库用户

如果不存在该用户,则创建该用户:

  1. 如果尚未显示,请单击 Database Users 标签页。

  2. 单击 Add New Database User(添加新的数据库用户)。

  3. 添加 Atlas admin 用户。

请记下为新用户选择的用户名和密码,在运行 mongomirror 时必须指定这些凭据。

4

如果您运行 mongomirror 时所使用的主机不在集群的 IP 访问列表中,请更新该列表。您可以指定以下任一项:

  • 将运行 mongomirror 的服务器的公共 IP 地址,或者

  • 如为 VPC 对等设置,则为对等方的 VPC CIDR 块(或子网)或对等方 VPC 的安全组。

5
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含所需项目的组织。

  2. 如果尚未显示,请从导航栏的Projects菜单中选择所需的项目。

  3. 如果尚未出现,请单击侧边栏中的 Clusters(集群)。

    会显示集群页面。

6

单击要将数据迁移到 Atlas 集群的 Connect

7

您可以从 Atlas 用户界面获取 Atlas 集群的主机名信息。

注意

使用 mongomirror 迁移数据时,无需使用驱动程序。

  1. Connect 对话框中单击 Shell

  2. 从下拉列表中选择 3.4 or earlier。连接字符串应类似于以下示例。为便于阅读,此示例已分为多行:

    mongodb://<db_username>:<db_password>@
    00.foo.mongodb.net:27017,
    01.foo.mongodb.net:27017,
    02.foo.mongodb.net:27017/test?
    ssl=true&replicaSet=myAtlasRS&authSource=admin
  3. 在文本编辑器中,粘贴replicaSet的值,添加正斜杠 ( / ),然后将主机列表追加为逗号分隔值,如下例所示:

    myAtlasRS/00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017

在下一步中,将此值用于 --destination

8

要完成迁移过程,请切换到 Atlas

mongomirror 完成初始同步并跟踪副本集的 oplog 后,您可以切换到目标 Atlas 集群。

1

此举可确保不对源集群执行其他写入操作。

2

这表示源集群和目标集群处于一致状态。

3

Atlas 集群更新后,请停止 mongomirror

4

通过集群面板上的 Connect(连接)按钮提供的 Atlas 连接字符串,更新客户端应用程序。

有关连接 Atlas 的详细信息,请参阅通过驱动程序连接

mongomirror 会将其进度记录到终端中的标准输出。初始同步期间,mongomirror 会为其复制的每个集合记录一个进度条。例如:

2021-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%)
2021-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)

跟踪 oplog 时,mongomirror 会记录源集群上的最新 oplog 条目与目标集群上最后处理的 oplog 条目之间的滞后时间(以秒为单位)。例如:

2016-12-12T16:22:17.027-0800 Current lag from source: 6s

6 秒的延迟时间意味着处理的最后一个 oplog 条目 mongomirror 比源集群上可用的最新条目早 6 秒。

注意

mongomirror 赶上此滞后的用时可能大于或小于 6 秒,具体取决于每秒到达的条目数。

0 秒延迟时间表示 mongomirror 正在处理比最新 oplog 条目晚到一秒以内的条目。

如果源集群具有索引,则 mongomirror 将在目标集群上建立相同的索引。进度日志显示索引建立过程的开始时间和结束时间。要查看索引建立进度,您可以:

  • 在目标集群的主节点上使用 currentOp 命令。command 字段显示有关运行操作的信息。索引构建条目如下所示:

    "command" : {
    "createIndexes" : "perfs",
    "indexes" : [
    {
    "key" : {
    "animal" : "text"
    },
    "name" : "animal_text"
    }
    ]...
  • 下载目标集群的 mongodb 日志,然后搜索索引相关行的最新条目。与索引构建相关的日志消息如下所示:

    {"t":{"$date":"2021-08-09T16:35:50.227+00:00"},"s":"I", "c":"INDEX", "id":20447, "ctx":"conn1080","msg":"Index build: completed","attr":{"buildUUID":{"uuid":{"$uuid":"c4a62739-bf19-456d-bbd6-7baa29f1063b"}}}}

为避免争用网络和 CPU 资源,请在副本集的 mongod 实例主机以外的主机上运行 mongomirror

  • mongomirror 会影响源副本集的性能,其效果类似于存在从节点:

    • 对于初始同步阶段,负载会随着数据集的大小而扩展变化。

    • 初始同步完成后,负载会以每小时使用 oplog 千兆字节的速度递增。

有关mongomirror事务语法、选项和示例,请参阅mongomirror 参考页面

对于 mongomirror 故障排除,请参阅实时迁移(拉取)的常见验证后错误

后退

自管理工具