“文档” 菜单
文档首页
/
MongoDB 阿特拉斯
/ / /

迁移 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之前, 会将独立运行的 MongoDB 部署转换为副本集。

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

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

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

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

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

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

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

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

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

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

如果不存在这样的用户,请在源 MongoDB 副本集中创建该用户。不同的 MongoDB Server 版本具有不同的内置角色。根据 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。要了解更多信息,请参阅添加数据库用户

mongomirror 支持以下迁移路径。

重要

您不能使用mongomirror从源副本集6迁移。 0 .x 或更高版本复制到目标副本集6 。 0 .x 或更高版本。要迁移副本集6 。 0 .x 或更高版本,请将 MongoDB 至少升级到6 . 0 。 13并使用此实时迁移过程。

源副本集
MongoDB 版本
目标 Atlas 副本集
MongoDB 版本
5.0
4 。 4 、 5 。 0
4.4
4 。 4 、 5 。 0
4 。 2
4 。 4 、 5 。 0
4 。 0
4 。 4 、 5 。 0
3 。 6
4 。 4 、 5 。 0
3 。 4
4 。 4 、 5 。 0
3 。 2
4 。 4 、 5 。 0
3 。 0
4 。 4 、 5 。 0
2.6
4 。 4 、 5 。 0

注意

要从5降级。将0更改为4 。 4 ,源FCV必须与目标匹配。

注意

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

操作系统
立即下载
Amazon Linux 1
Amazon Linux 2
Debian 8 。 1
Debian 9 。 2
Debian 10
macOS 64 位
RHEL 6 。 2
RHEL 7 。 0
RHEL 7 。 1 PPC 64 LE
RHEL 7.2 s390x
RHEL 8 。 0
RHEL 8 。 1 PPC 64 LE
SLES 12
SLES 15
Ubuntu 14 。 04
Ubuntu 16.04
Ubuntu 16 。 04 ARM
Ubuntu 16 。 04 PPC 64 LE
Ubuntu 18 。 04
Ubuntu 18 。 04 ARM
Ubuntu 18 。 04 PPC 64 LE
Ubuntu 20 。 04
Ubuntu 20 。 04 ARM
Windows

当您启动 mongomirror 时,它会:

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

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

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

    注意

    从版本0开始。 5 。 0 、 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(数据库部署)页面尚未出现,请单击侧边栏中的 Database(数据库)。

6

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

7

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

注意

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

  1. Connect对话框中,单击Shell

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

    mongodb://<username>:<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 资源,请在副本集的 实例主机以外的主机上运行mongomirror mongod

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

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

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

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

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

后退

自管理工具

来年

mongomirror