使用 Azure 数据库迁移服务 将 MongoDB 迁移到 Azure DocumentDB

在本教程中,使用 Azure 门户中的 Azure 数据库迁移服务 (DMS) 体验创建和管理从 MongoDB 的本地或云实例到 Azure DocumentDB 的迁移作业。 DMS 支持联机和脱机迁移、公共和专用连接以及集合级迁移设置。

门户体验使用与 Azure DocumentDB 迁移扩展相同的托管迁移功能。 如果要在不安装Visual Studio Code扩展的情况下创建和监视迁移作业,请使用此方法。

Prerequisites

  • 一份 Azure 订阅。 如果没有 Azure 订阅,请创建一个试用帐户。
  • 现有的 Azure DocumentDB 群集

在开始迁移之前,请准备 Azure DocumentDB 帐户和现有的 MongoDB 实例进行迁移。

MongoDB 实例(源)

  • 完成迁移前评估,以检查源实例与目标账户之间的兼容性问题和警告。
  • 添加一个具有 readAnyDatabase 和 clusterMonitor 权限的用户,除非已存在。 创建迁移作业时使用此凭据。
  • 记录生存时间(TTL)索引的定义,并在开始迁移之前从源集合中删除这些索引。 此步骤可防止可能会干扰迁移后源和目标文档计数比较的后台过期删除。

Azure DocumentDB (目标)

  • 收集 Azure DocumentDB 帐户凭据。
  • 确保用户具有createCollection、dropCollection、createIndex和insertlistCollections权限。
  • 如果预先创建目标集合架构并将 Overwrite target collection 设置为 “否”,请先从这些目标集合中删除任何 TTL 索引,然后再开始迁移。 仅在迁移和最终数据验证完成后,才在目标上创建 TTL 索引。

推迟在目标上启用高可用性(HA)并添加副本群集,直到大容量复制完成,以提高迁移速度。 对于联机迁移,在迁移进入复制正在进行的源更改阶段后,启用 HA 并添加副本群集。 对于脱机迁移,在大容量复制完成后执行此操作。 在将生产流量定向到目标之前,请确保 HA 和任何必需的副本群集已准备就绪。 有关详细信息,请参阅 优化迁移速度。

所需的最低权限

使用以下最低角色以创建和运行迁移作业。

最低角色 Scope 适用于连接模式 Purpose
读取器 Subscription 公共和专用 列出订阅和资源组。 每个迁移作业都是必需的。
Azure 数据库迁移服务 参与者 资源组 公共和专用 创建Azure 数据库迁移服务(DMS)。 无需为每个迁移创建新的 DMS。 每个地区一个 DMS 就足够了。
参与者 Subscription 公共和专用 在订阅中注册 DMS。 此注册是一次性活动,可以委托给其他用户。
用户访问管理员 虚拟网络 仅限专用 将网络参与者角色分配给 DMS 对象主体。 此指派是每个虚拟网络的一次性活动,可以委托给其他用户。
参与者 Azure DocumentDB 公共和专用 触发迁移作业。

有关提供程序注册详细信息,请参阅 在您的订阅中注册 Microsoft.DataMigration 资源提供程序。

Important

迁移作业当前不支持Microsoft Entra ID身份验证。 使用原生 DocumentDB 身份验证。

执行迁移

有关迁移大小、速度和直接转换的规划指南,请参阅 迁移最佳做法。

打开 DMS 迁移体验

  1. 登录到 Azure 门户。

  2. 选择“创建资源”,搜索Azure 数据库迁移服务,然后选择“创建”。

  3. 在“选择迁移方案”和“数据库迁移服务”上,配置迁移方案:

    • 对于 源服务器类型,请选择 MongoDB。
    • 对于目标服务器类型,请选择Azure DocumentDB(与 MongoDB 兼容)。
    • 对于数据库迁移服务,请选择数据库迁移服务。

    Azure门户的屏幕截图,其中显示了 MongoDB 作为源,Azure DocumentDB 作为目标,数据库迁移服务作为迁移服务。

  4. 在“基本”选项卡上,配置 DMS 资源:

    • 选择“订阅”和“资源组”。
    • 对于“位置”,请选择与目标Azure DocumentDB 帐户相同的Azure区域。
    • 输入唯一的迁移服务名称。

    用于创建Azure 数据库迁移服务资源的“基本信息”选项卡的屏幕截图。

  5. 选择 “查看 + 创建”,然后选择“验证成功后 创建 ”。

  6. 部署完成后,选择“转到资源”。

  7. 在 DMS 资源概述中,选择“ 新建迁移”。

    带有“新建迁移”操作的 Azure 数据库迁移服务 资源概述屏幕截图。

创建迁移作业

使用迁移作业将一组集合从源迁移到目标Azure DocumentDB。

在迁移向导检索可用的数据库和集合之前,请为Azure门户中间件配置访问权限:

  1. 查看向导显示的门户中间件 IP 地址。

  2. 选择与环境匹配的选项:

    • 在将显示的 IP 地址添加到源 MongoDB 群集和目标 Azure DocumentDB 群集的防火墙允许列表后,选择 已配置防火墙访问。
    • 如果连接是专用连接,或者无法更改防火墙规则,请选择“专用连接或受限的防火墙访问”。 对于此选项,请在 步骤 4 中使用 JSON 配置提供要迁移的数据库和集合。
  3. 选择继续。

MongoDB 迁移向导的屏幕截图,其中显示了门户中间件 IP 地址和防火墙访问选项。

步骤 1:创建作业

在此步骤中,输入作业的基本详细信息。

  • 作业名称:输入用户友好名称以标识迁移作业。

  • 迁移模式:选择最适合用例的迁移模式。

    • 在线迁移会复制集合数据,并确保在迁移过程中更新也会被同步复制。 此方法可最大程度地减少停机时间,使运营保持业务连续性。 如果正在进行的操作至关重要,需要优先考虑减少停机时间,则可以使用此选项。
    • 脱机 迁移在开始时捕获数据库的快照,提供了一种更简单、更可预测的方法。 如果可以接受使用数据库的静态副本,实时更新并不重要,则可以使用这种方法。

    Important

    若要确保从 MongoDB 成功联机迁移,必须在源 MongoDB 服务器上启用 ChangeStream。 如果没有 ChangeStream,迁移过程不会捕获初始迁移后对数据所做的任何修改。 因此,仅在源 MongoDB 服务器上启用了 ChangeStream 时,才使用联机迁移模式。

  • 连接:根据组织的安全授权和网络设置,从 “公共 ”和 “专用”中进行选择。

    • 当源服务器和目标服务器可通过公共 IP 在互联网上访问时,请使用 Public。 它支持需要外部辅助功能的服务。
    • 当源服务器或目标服务器只能通过虚拟网络中的专用 IP 进行访问时使用 专用 服务器。 它通过消除对公共 Internet 的曝光来提高安全性。

选择下一步继续。

Azure门户迁移向导中“创建作业”步骤的屏幕截图。

步骤 2:选择目标

选择现有的 Azure DocumentDB 帐户,并提供其连接字符串。

  1. 从下拉列表中选择订阅、资源组和 Azure DocumentDB 帐户。

  2. 输入 Azure DocumentDB 帐户的连接字符串。

  3. 选择下一步继续。

Azure门户迁移向导中选择目标步骤的屏幕截图。

步骤 3:配置连接

此屏幕取决于在步骤 1 中选择的连接模式。

如果在迁移向导中选择了 公共 作为连接模式,请使用以下步骤:

  1. 请注意向导中显示的静态 IP 地址。

  2. 将这些 IP 地址添加到源 MongoDB 服务器上的防火墙允许列表。

  3. 将这些 IP 地址添加到 Azure DocumentDB 防火墙。

Azure门户迁移向导中公共连接配置步骤的屏幕截图。

如果在迁移向导中选择“ 专用 ”作为连接模式,请使用以下步骤:

  1. 在 虚拟网络中,为所需的网络路径选择订阅、资源组、虚拟网络和子网。 向导显示源、目标、通用或辐条虚拟网络详细信息,具体取决于所选拓扑。

  2. 在 DMS 配置中,选择不与虚拟网络或任何可访问的本地地址空间重叠的 CIDR 范围。

  3. 在“启用虚拟网络集成”中,运行向导中显示的 PowerShell 命令,将网络参与者角色分配给相关虚拟网络或网络的 DMS 服务主体。 如果已为同一虚拟网络上的之前的迁移完成此步骤,则无需重复此步骤。

Azure门户迁移向导中专用连接配置步骤的屏幕截图。

有关详细信息,请参阅 公共连接、 专用连接和 连接故障排除。

选择下一步继续。

步骤 4:选择集合

选择要包含在迁移作业中的集合。 使用搜索选项从集合列表中选择。 目标中已存在的集合会自动在“目标中的存在”列中标记为“是”。

请确保选择要包含的所有集合,因为在创建迁移作业后无法添加集合。

选择下一步继续。

Azure门户迁移向导中“选择集合”步骤的屏幕截图。

如果启用了专用终结点或Azure门户中间件无法连接到源或目标,向导可能会显示错误,而不是检索集合列表。 你仍然可以使用以下任一选项来提供集合:

  • 在 JSON 视图中,上传列出要迁移的集合的 JSON 文件。
  • 在“表”视图中,在database.collection下,以格式输入集合,然后选择“添加”。 重复此步骤以单独添加每个集合。

对于 JSON 视图,请使用一个数组,其中每个集合对应一个对象:

[
  {
    "sourceDatabase": "myDatabase",
    "sourceCollection": "myCollection"
  },
  {
    "sourceDatabase": "myDatabase",
    "sourceCollection": "anotherCollection"
  }
]

表视图中的“添加集合”字段的屏幕截图,其中包含一个采用 database.collection 格式的集合字段和一个“添加”按钮。

步骤 5:配置集合

配置每个所选集合迁移到目标的方式。 对于每个集合,请设置以下选项:

  • 覆盖目标集合:指定是否覆盖目标中已存在的集合。 分片和索引选项仅在将 Overwrite 目标集合设置为“是”时适用。
  • 分片策略:选择是分片目标集合还是将其保留为未分片。 对目标集合进行分片时,它将使用与源集合相同的分片键。
  • 索引策略:选择在目标集合上构建索引的方式:
    • 不要创建索引:跳过索引创建。
    • 从源复制索引:从源集合复制所有索引。 在初始数据加载之前复制唯一索引,在初始数据加载后复制非唯一索引。

使用内联编辑器为单个集合配置这些设置,或选择 “批量更新 ”将相同的设置应用于多个集合。

选择下一步继续。

Azure门户迁移向导中配置集合步骤的屏幕截图。

步骤 6:确认并启动

选择 “开始迁移”之前,请查看迁移作业详细信息。 如果需要更新详细信息,请使用 “编辑详细信息 ”按钮。

创建迁移作业后,会自动重定向到“ 查看现有作业 ”页。

Azure 数据库迁移服务运行数据迁移任务。 在迁移期间,无需与源环境和目标环境保持连接。 仪表板会频繁更新状态。

监视现有迁移作业

在 DMS 资源概述中,找到 “监视迁移” 卡,然后选择 “监视迁移”。 选择迁移作业以查看其状态和集合级别详细信息。

Azure 数据库迁移服务资源概述的屏幕截图,其中包含“监视迁移”操作。

状态会定期自动更新。 将所选集合快照复制到目标后,脱机作业会自动完成。 不过,您需要手动完成在线迁移的切换。

可以 暂停 迁移作业,以在逻辑点暂时停止迁移作业。 当您准备好继续时,请选择 恢复,从作业停止处继续。

若要查看集合状态,请从表中选择一行。

显示Azure门户中脱机迁移的集合级别状态的屏幕截图。

监视在线迁移

与离线迁移不同,在线迁移不会自动完成。 相反,它们会持续运行,直到你选择 Cutover 手动将其完成。

在切换期间,迁移工具会寻找源集合没有变更的时间窗口,以便它可以完成复制挂起的更改并完成迁移。 在迁移之前删除源 TTL 索引并在切换时停止应用程序写入会创建此无更改窗口。 如果写入或 TTL 驱动的删除继续,该工具可能无法找到无更改窗口,并且切换过程可能会一直处于进行中,直到这些更改停止。

要完成在线迁移,请按给定顺序执行以下步骤:

  1. 在所有集合均完成初始数据加载后,“切换”按钮将启用。 在此阶段,作业处于复制阶段,持续将更新从源实例复制到目标实例,以使其保持最新状态并同步最新更改。

  2. 准备执行迁移切换时,停止向要迁移的源集合发出的所有传入事务。

  3. 确认 TTL 索引在切换期间及最终数据验证过程中始终不存在于源集合和目标集合中。 源过期删除可能会延迟切换,而目标过期删除可能会导致文档计数在复制追赶后仍然有所不同。

  4. 自 上次更改以来的时间 显示上次更新与当前时间之间的时间差距。

  5. 监视表中的复制更改,并等待 复制更改应用 指标稳定。 稳定的 复制更改播放 指标指示源中的所有更新已成功复制到目标。

  6. 在所有集合的复制间隔最小且复制更改播放指标稳定时,请选择“直接转换”。

显示Azure门户中联机迁移的集合级别状态的屏幕截图。

  1. 等待迁移作业完成,这表示所有源更改已同步到目标端。

  2. 在声明迁移完成之前,请手动验证源和目标是否已同步。 至少比较每个源和目标集合的文档计数。

  3. 迁移和最终数据验证完成后,使用迁移前记录的定义在目标上创建 TTL 索引。 然后,在目标上恢复过期处理,包括迁移期间过期的文档。

在您的订阅中注册 Microsoft.DataMigration 资源提供程序

要在你的订阅中注册 Microsoft.DataMigration 资源提供程序,请按照以下步骤操作:

Azure 门户

  1. 转到 Azure 门户,导航到你的订阅。

  2. 在左侧菜单中,选择“设置”下的“资源提供程序”。

  3. 在顶部的搜索框中搜索Microsoft.DataMigration。

  4. 如果未注册,请选择它,然后选择“ 注册 ”按钮。

Azure CLI

  1. 打开 Azure Cli 或本地终端。

  2. 运行以下命令,注册资源提供程序:

    az provider register --namespace Microsoft.DataMigration
    

PowerShell

  1. 打开 Azure Cli 或本地 PowerShell。

  2. 运行以下命令,注册资源提供程序:

    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataMigration"
    

FAQ

当 Azure DocumentDB 支持视图时,为什么选择集合屏幕步骤中缺少视图?

Azure DocumentDB 支持创建新视图。 但是,DMS 迁移体验不支持迁移现有视图。

迁移完成后,您随时可以重新创建视图。

从 MongoDB 迁移到 Azure DocumentDB 时,迁移过程会跳过哪些集合和数据库?

迁移过程将以下数据库和集合视为 MongoDB 的内部版本:

类别 Description
数据库 管理员、本地、系统配置
收藏 具有前缀的任何集合 system.

离开Azure门户后迁移是否继续?

Yes. DMS 在 Azure 中执行数据迁移,在提交作业后不再依赖你的浏览器。 可以关闭Azure门户,稍后返回到 DMS 资源以监视作业。

是否可以在迁移期间重命名数据库和集合?

DMS 迁移体验不支持迁移期间的数据库和集合重命名。

如何配置源服务器防火墙以避免连接问题?

所需的网络配置取决于所选的连接模式:

  • 公共模式: 允许向导在源防火墙和目标防火墙上显示的 IP 地址通过,以启用通信。
  • 专用模式: 启用 虚拟网络集成 ,以便 DMS 服务器可以安全地与虚拟网络中的源终结点和目标终结点通信。

有关详细的验证步骤和故障排除,请参阅 排查连接问题。

可以在单个迁移中迁移多少个数据库和集合?

可以在单个迁移中包括无限制的集合。

我可以同时运行多少个迁移任务?

使用公共访问时,可以运行多个迁移作业。 但是,使用 专用访问 时,单个虚拟网络 一次只能支持一个活动作业。 若要运行具有专用访问权限的多个作业,请对每个作业使用不同的 虚拟网络 。