使用 Azure DocumentDB 迁移扩展将 MongoDB 联机迁移到 Azure DocumentDB

在本教程中,使用 Visual Studio Code 中的 Azure DocumentDB 迁移扩展来创建和管理从 MongoDB 的本地或云实例到 Azure DocumentDB 的迁移作业。 此扩展提供开发人员友好的界面来执行迁移,而不会中断服务。 该扩展无需额外的基础设施,并提供安全连接、零成本使用,以及对要迁移哪些数据库和集合的细粒度控制。

本文重点介绍如何使用扩展的集成工作流直接在 Visual Studio Code 中简化迁移步骤。 此方法非常适合需要简化的托管体验且复杂性最低且可靠性最高的方案。

先决条件

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

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

MongoDB 实例(源)

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

Azure DocumentDB(target)

  • 收集 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 资源提供程序。

重要

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

执行迁移

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

连接到源

  1. 从活动栏中打开 DocumentDB 。
  2. 添加要迁移到 “文档数据库连接 ”列表的 MongoDB 服务器。
  3. 选择“ 添加新连接”。
  4. 在导航栏上,选择Connection String。
  5. 请粘贴您的连接字符串:mongodb://<YOUR_USERNAME>:<YOUR_PASSWORD>@localhost:10260/?tls=true&tlsAllowInvalidCertificates=true&authMechanism=SCRAM-SHA-256
  6. 从 DocumentDB 连接列表中,选择一个连接并展开以进行连接。

调用迁移扩展

可以从 DocumentDB 连接调用迁移扩展。

  1. 右键单击展开的(已连接)连接。

  2. 从上下文菜单中选择 “数据迁移 ”。

    在 Visual Studio Code 中的上下文菜单的屏幕截图。

  3. 在命令面板中,选择迁移到 Azure DocumentDB。 命令面板中列出了 Visual Studio Code 内的迁移工具的截图。

  4. 然后选择 迁移到 Azure DocumentDB。 命令面板的截图,显示了 Visual Studio Code 中的迁移选项。

  5. 迁移向导将引导您完成此过程。

创建迁移作业

使用迁移作业将一组集合从源迁移到目标Azure DocumentDB。 创建迁移作业向导有七个步骤。

步骤 1:创建作业

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

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

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

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

    重要

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

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

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

选择“下一步”继续操作。

向导中“创建作业”步骤的屏幕截图。

步骤 2:选择目标

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

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

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

  3. 确保Azure DocumentDB 防火墙上允许屏幕上列出的 IP。

  4. 选择“下一步”继续操作。

向导中选择目标步骤的屏幕截图。

步骤 3:选择数据库迁移服务(DMS)

Azure 数据库迁移服务是一项服务,它使用云基础结构进行数据传输,而不是依赖本地资源,将数据迁移到Azure数据平台。 从下拉列表中选择现有的Azure 数据库迁移服务实例,或选择 Create DMS 创建新的迁移服务。

重要

请确保 Microsoft.DataMigration 资源提供程序已在您的订阅中注册。 每个订阅只需操作一次。

选择“下一步”继续操作。

向导中选择数据库迁移服务步骤的截图。

步骤 4:配置连接

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

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

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

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

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

向导中公共连接配置步骤的屏幕截图。

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

  1. 在 源连接路径中,选择与环境匹配的拓扑:

  2. 如果适用,请选择源和目标是否使用相同的网络:

    • 对于Azure专用终结点方案,如果两个终结点位于同一虚拟网络中,请选择“源”和“目标”共享一个通用虚拟网络。
    • 对于分支代理方案,如果代理和目标专用终结点位于同一辐射虚拟网络中,则选择 代理和目标将使用同一辐射虚拟网络。
  3. 在专用源连接中,可以选择为连接到源时要使用的 DMS 提供专用连接字符串。 如果使用 TCP 代理拓扑,则需要专用连接字符串,并且必须指向带有 directConnection=true 的代理终结点。

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

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

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

  7. 选择虚拟网络集成步骤已完成,然后继续。

向导中专用连接配置步骤的屏幕截图。

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

选择“下一步”继续操作。

步骤 5:选择集合

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

小窍门

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

选择“下一步”继续操作。

向导中“选择集合”步骤的屏幕截图。

步骤 6:配置集合

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

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

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

选择“下一步”继续操作。

向导中配置集合步骤的屏幕截图。

步骤 7:确认并启动

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

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

小窍门

Azure 数据库迁移服务运行数据迁移任务。 因此,在数据迁移期间,无需连接到源环境和目标环境。 仪表板会定期更新状态。

监视现有迁移作业

使用“ 查看现有作业 ”选项卡监视已初始化作业的迁移状态。 所选的 DMS 决定作业列表。 使用 “更改 DMS ”按钮更改所选内容。

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

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

查看现有作业界面的截图。

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

显示脱机迁移的集合状态的屏幕截图。

监视在线迁移

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

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

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

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

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

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

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

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

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

显示联机迁移的集合状态的屏幕截图

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

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

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

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

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

Azure 门户

  1. 转到Azure portal并导航到订阅。

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

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

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

Azure CLI

  1. 打开本地终端。

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

    az provider register --namespace Microsoft.DataMigration
    

PowerShell

  1. 打开本地 PowerShell。

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

    Register-AzResourceProvider -ProviderNamespace "Microsoft.DataMigration"
    

FAQ

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

Azure DocumentDB 支持创建新视图。 但是,迁移扩展不支持迁移现有视图。

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

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

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

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

迁移作业是否在本地计算机上运行?

VS Code 中的迁移向导需要从本地计算机到源环境和目标环境的网络连接。 向导使用此连接来枚举数据库和集合并提交迁移作业。 提交作业后,可以关闭 VS Code 或与源和目标环境断开连接。

Azure 数据库迁移服务(DMS)完全执行数据迁移。 DMS 是一种Azure托管服务,用于管理所有数据移动。 DMS 不依赖于本地计算机或 VS Code 来执行作业,因此在提交作业后不需要本地连接。

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

扩展不支持迁移期间的数据库和集合重命名。

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

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

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

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

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

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

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

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

扩展生成的日志类型是什么?

扩展记录默认日志目录中的错误、警告和其他诊断日志:

  • Windows - C:\Users\<username>\.dmamongo\logs\
  • Linux - ~/.dmamongo/logs
  • macOS - /Users/<username>/.dmamongo/logs

后续步骤