迁移到 Amazon DocumentDB - Amazon DocumentDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

迁移到 Amazon DocumentDB

Amazon DocumentDB(具有 MongoDB 兼容性)是一项完全托管的数据库服务,与 MongoDB API 兼容。您可以使用本部分中详述的过程将数据从在本地或亚马逊 Elastic Compute Cloud (Amazon EC2) 上运行的 MongoDB 数据库迁移到 Amazon DocumentDB。

迁移工具

要迁移到 Amazon DocumentDB,大多数客户使用的两个主要工具是Amazon Database Migration Service(Amazon DMS)和命令行实用程序,如mongodumpmongorestore. 作为最佳做法,对于上述任一选项,我们建议您在开始迁移之前首先在 Amazon DocumentDB 中创建索引,因为这可以减少总体时间并提高迁移速度。要执行此操作,您可以使用Amazon DocumentDB 索引工具.

Amazon Database Migration Service

Amazon Database Migration Service(Amazon DMS) 是一项云服务,可将关系数据库和非关系数据库轻松迁移到 Amazon DocumentDB。您可以使用Amazon DMS将您的数据库从本地或 EC2 上托管的数据库迁移到 Amazon DocumentDB。与Amazon DMS,您可以执行一次性迁移,也可以复制持续更改以保持源和目标同步。

为帮助降低迁移成本,您可以使用Amazon DMS在迁移到 Amazon DocumentDB 时,为每个实例免费提供六个月。有关更多信息,请参阅免费 DMS

有关使用的更多信息Amazon DMS迁移到 Amazon DocumentDB,请参阅:

命令行实用程序

用于将数据迁移到或从中迁移数据 Amazon DocumentDB 用程序,包括mongodumpmongorestoremongoexport, 和mongoimport. 通常,mongodumpmongorestore 是最有效的实用程序,因为它们使用二进制格式在数据库中转储和还原数据。这通常是性能最高的选项,而且与逻辑导出相比,产生的数据量更少。如果您要使用 JSON 或 CSV 等逻辑格式导出和导入数据,可以使用 mongoexportmongoimport,因为此时数据是人类可读格式,但速度通常比 mongodump/mongorestore 慢,而且得到的数据量也较多。

这些区域有:迁移方法部分将讨论何时最好使用Amazon DMS和命令行实用程序,可根据您的使用案例和要求决定。

Discovery

对于您的每个 MongoDB 部署,您应该确定并记录两组数据:架构详情运行特征. 该信息将帮助您选择适当的迁移方法和集群大小调整。

架构详情

  • 名称

    选择用于跟踪该部署的唯一名称。

     

  • Version

    记录部署正在运行的 MongoDB 版本。要查找版本,请使用 mongo shell 连接到副本集成员并运行 db.version() 操作。

     

  • 类型

    记录您的部署是独立的 mongo 实例、副本集还是分片集群。

     

  • 成员

    记录每个集群、副本集或独立成员的主机名、地址和端口。

     

    对于集群化部署,您可以通过使用 mongo shell 连接到 mongo 主机并运行 sh.status() 操作来查找分片成员。

     

    对于副本集,您可以通过使用 mongo shell 连接到副本集成员并运行 rs.status() 操作来获取成员。

     

  • Oplog 大小

    对于副本集或分片集群,记录每个副本集成员的 oplog 大小。要查找成员的 oplog 大小,请使用 mongo shell 连接到副本集成员并运行 ps.printReplicationInfo() 操作。

     

  • 副本集成员优先级

    对于副本集或分片集群,记录每个副本集成员的优先级。要查找副本集成员优先级,请使用 mongo shell 连接到副本集成员并运行 rs.conf() 操作。优先级显示为 priority 键的值。

     

  • 是否使用 TLS/SSL

    记录是否在每个节点上使用传输层安全性 (TLS)/安全套接字层 (SSL) 进行传输加密。

运行特征

  • 数据库统计数据

    对于每个集合,记录以下信息:

    • 名称

    • 数据大小

    • 集合数量

     

    要查找数据库统计数据,请使用 mongo shell 连接到数据库并运行命令 db.runCommand({dbstats: 1})

     

  • 集合统计数据

    对于每个集合,记录以下信息:

    • 命名空间

    • 数据大小

    • 索引数量

    • 集合是否有上限

     

  • 索引统计数据

    对于每个集合,记录以下索引信息:

    • 命名空间

    • ID

    • Size

    • 密钥

    • TTL

    • 稀疏

    • 背景

     

    要查找索引信息,请使用 mongo shell 连接到数据库并运行命令 db.collection.getIndexes()

     

  • Opcounters

    该信息可帮助您了解当前的 MongoDB 工作负载模式(读取操作繁重、写入操作繁重还是平衡)。它还能够为您的初始 Amazon DocumentDB 实例选择提供指导。

     

    以下是要在监测期间收集的关键信息(以计数/秒为单位):

    • 查询

    • 插入

    • 更新

    • 删除

     

    您可以通过绘制一段时间内 db.serverStatus() 命令的输出来获取该信息。也可以使用 mongostat 工具获取这些统计数据的即时值。但使用该选项时,您的迁移计划可能无法涵盖峰值负载。

     

  • 网络统计数据

    该信息可帮助您了解当前的 MongoDB 工作负载模式(读取操作繁重、写入操作繁重还是平衡)。它还能够为您的初始 Amazon DocumentDB 实例选择提供指导。

     

    以下是要在监测期间收集的关键信息(以计数/秒为单位):

    • 连接

    • 网络输入字节数

    • 网络输出字节数

     

    您可以通过绘制一段时间内 db.serverStatus() 命令的输出来获得该信息。也可以使用 mongostat 工具获取这些统计数据的即时值。但使用该选项时,您的迁移计划可能无法涵盖峰值负载。

计划:Amazon DocumentDB 集群要求

要实现成功迁移,您需要仔细考虑 Amazon DocumentDB 集群的配置以及应用程序访问集群的方式。在确定集群要求时,请考虑以下每个维度:

  • 可用性

    Amazon DocumentDB 通过部署副本实例提供高可用性,副本实例可在称为故障转移. 通过将副本实例部署到不同的可用区,您可以实现更高级别的可用性。

     

    下表提供了 Amazon DocumentDB 部署配置指南,以满足特定的可用性目标。

     

    可用性目标 实例总数 副本 可用区
    99% 1 0 1
    99.9% 2 1 2
    99.99% 3 2 3

     

    整体系统可靠性必须考虑所有组件,而不仅仅是数据库。有关满足整体系统可靠性需求的最佳实践和建议,请参阅AmazonWWell-Architected lar Whitepaper.

     

  • 性能

    Amazon DocumentDB 实例允许您读写集群的存储卷。集群实例有多种类型,它们具有不同的内存和 vCPU,这将影响集群的读写性能。使用您在发现阶段收集的信息,选择可支持您的工作负载性能要求的实例类型。有关受支持实例类型的列表,请参阅管理实例类

     

    为 Amazon DocumentDB 集群选择实例类型时,请考虑工作负载性能要求的以下方面:

    • vCPU— 需要更高连接数的架构可能会受益于具有更多 vCPUS 的实例。

       

    • 内存-如果可能,将工作数据集保留在内存中可提供最高的性能。一项基本准则是为 Amazon DocumentDB 引擎预留三分之一的实例内存,将剩余的三分之二用于工作数据集。

       

    • 连接— 每个 Amazon DocumentDB 实例 vCPU 的最小连接数是八个连接。虽然 Amazon DocumentDB 实例的连接限制要高得多,但在连接数超过每 vCPU 8 个连接后,更多连接带来的性能优势将下降。

       

    • 网络— 具有大量客户端或连接的工作负载应考虑插入和检索数据所需的聚合网络性能。批量操作可更有效地使用网络资源。

       

    • 插入性能— 单个文档插入通常是将数据插入 Amazon DocumentDB 的最慢方式。批量插入操作要比单个插入快得多。

       

    • 读取性能— 从工作内存读取始终比从存储卷返回的读取要快。因此,优化实例内存大小以将工作集保留在内存中是最佳的做法。

       

    除了从主实例提供读取之外,Amazon DocumentDB 集群还会自动配置为副本集。之后,您可以通过在 MongoDB 驱动程序中设置读取首选项来将只读查询路由到只读副本。您可以通过添加副本来扩展读取流量,从而减少主实例上的总体负载。

     

    可以在同一集群中部署不同实例类型的 Amazon DocumentDB 副本。一个作为示例的使用案例是启动一个具有较大实例类型的副本来处理临时分析流量。如果部署一组混合实例类型,请确保为每个实例配置故障转移优先级。这有助于确保故障转移事件始终提升足够大小的副本来处理写入负载。

     

  • 恢复

    Amazon DocumentDB 会在写入数据时会持续备份数据。它在 1 到 35 天的可配置时间段内提供时间点恢复 (PITR) 功能,称为备份保留期. 默认备份保留期为 1 天。Amazon DocumentDB 还会自动创建存储卷的每日快照,这些快照也在配置的备份保留期内保留。

     

    如果您需要保留超出备份保留期的快照,还可以使用 Amazon Web Services Management Console和 Amazon Command Line Interface (Amazon CLI) 随时启动手动快照。有关更多信息,请参阅 在 Amazon DocumentDB 中备份和还原

     

    在规划迁移时,请考虑以下事项:

    • 选择满足恢复点目标 (RPO) 要求的备份保留期 (1-35 天)。

    • 确定是否需要手动快照,如果需要,确定时间间隔。

迁移方法

将数据迁移到 Amazon DocumentDB 有三种主要方法。

注意

虽然您可以随时在 Amazon DocumentDB 中创建索引,但整体来说,先创建索引,然后再导入大型数据集的速度会更快。作为最佳做法,我们建议对于以下每种方法,在执行迁移之前首先在 Amazon DocumentDB 中创建索引。要执行此操作,您可以使用Amazon DocumentDB 索引工具.

Offline

这些区域有:离线方法使用mongodumpmongorestore工具将数据从源 MongoDB 部署迁移到 Amazon DocumentDB 集群。离线方法是最简单的迁移方法,但是它也会给集群带来最多的停机时间。

离线迁移的基本过程如下所示:

  1. Quiesce 对 MongoDB 源进行写入。

  2. 从源 MongoDB 部分转储集合数据和索引。

  3. 将索引还原到 Amazon DocumentDB 集群。

  4. 将集合数据库还原到 Amazon DocumentDB 集群。

  5. 将您的应用程序终端节点更改为写入到 Amazon DocumentDB 集群。


               关系图:迁移到 Amazon DocumentDB 的离线方法

Online

在线 方法使用 Amazon Database Migration Service (Amazon DMS)。它执行从源 MongoDB 部署到 Amazon DocumentDB 集群的数据完全加载。然后,它会切换至更改数据捕获 (CDC) 模式来复制更改。在线方法可最大限度减少集群停机时间,但它是三种方法中速度最慢的一个。

在线迁移的基本过程如下所示:

  1. 您的应用程序正常使用源数据库。

  2. (可选)在 Amazon DocumentDB 集群中预先创建索引。

  3. 创建Amazon DMS任务执行完全加载,然后启用从源 MongoDB 部署到 Amazon DocumentDB 集群的 CDC。

  4. 在Amazon DMS任务完成完全加载并且正在将更改复制到 Amazon DocumentDB,将应用程序的终端节点切换至 Amazon DocumentDB 集群。


               关系图:迁移到 Amazon DocumentDB 的在线方法

有关使用Amazon DMS要迁移,请参阅将 Amazon DocumentDB 作为Amazon Database Migration Service以及相关的教程中的Amazon Database Migration Service用户指南.

Hybrid

这些区域有:混合方法使用mongodumpmongorestore工具将数据从源 MongoDB 部署迁移到 Amazon DocumentDB 集群。然后,它在 CDC 模式下使用 Amazon DMS 复制更改。混合方法使迁移速度和停机时间达到平衡,但它是这三种方法中最复杂的方法。

混合迁移的基本过程如下所示:

  1. 您的应用程序正常使用源 MongoDB 部署。

  2. 从源 MongoDB 部分转储集合数据和索引。

  3. 将索引还原到 Amazon DocumentDB 集群。

  4. 将集合数据库还原到 Amazon DocumentDB 集群。

  5. 创建Amazon DMS任务来启用从源 MongoDB 部署到 Amazon DocumentDB 集群的 CDC。

  6. 当Amazon DMS任务在可接受时段内复制更改,请将您的应用程序终端节点更改为写入到 Amazon DocumentDB 集群。


               关系图:迁移到 Amazon DocumentDB 的混合方法
重要

Amazon DMS 任务当前只能迁移单个数据库。如果 MongoDB 源具有大量数据库,则可能需要实现迁移任务的自动创建,或考虑使用离线方法。

不管您选择何种迁移方法,在迁移数据之前,在 Amazon DocumentDB 集群中预先创建索引都是一种最有效的措施。这是因为 Amazon DocumentDB 索引是并行插入的数据,但对现有数据创建索引是单线程操作。

Amazon DMS 不迁移索引(仅迁移数据),因此无需额外步骤来避免二次创建索引。

迁移源

如果您的 MongoDB 源是一个独立的 mongo 进程,并且您想要使用在线或混合迁移方法,请先将独立的 mongo 转换为副本集,以便创建 oplog 来用作 CDC 源。

如果您要从 MongoDB 副本集或分片集群进行迁移,请考虑为每个副本集或分片创建链接或隐藏的辅助副本集或分片来用作迁移源。执行数据转储可能会迫使工作集数据超出内存并影响生产实例的性能。您可以通过从不提供生产数据的节点迁移来降低这一风险。

迁移源版本

如果源 MongoDB 数据库版本与目标 Amazon DocumentDB 集群的兼容版本不同,您可能需要采取其他准备步骤来确保成功迁移。最常遇到的两个要求是将源 MongoDB 安装升级到支持的迁移版本(MongoDB 3.0 或更高版本),和升级应用程序驱动程序以支持目标 Amazon DocumentDB 版本。

如果您的迁移具有上述任一要求,请务必在迁移计划中包括这些步骤,以升级和测试任何驱动程序更改。

迁移连接

您可以从在数据中心中运行的源 MongoDB 部署或从在 Amazon EC2 实例上运行的 MongoDB 部署迁移到 Amazon DocumentDB。从在 EC2 上运行的 MongoDB 迁移很简单,只需要正确配置安全组和子网。


            关系图:从 Amazon EC2 源迁移到 Amazon DocumentDB

从本地数据库迁移需要 MongoDB 部署与 Virtual Private Cloud (VPC) 之间的连接。您可以通过虚拟专用网络 (VPN) 连接或使用 Amazon Direct Connect 服务来完成该操作。虽然您可以通过 Internet 迁移到 VPC,但从安全角度来看,这种连接方法是最不可取的。

下图说明了通过 VPN 连接从本地源到 Amazon DocumentDB 的迁移。


            关系图:从本地源 (VPN) 迁移到 Amazon DocumentDB

以下表示从本地源到 Amazon DocumentDB 的迁移,使用Amazon Direct Connect.


            关系图:从本地源 () 迁移到 Amazon DocumentDBAmazon Direct Connect)

在线和混合迁移方法需要使用Amazon DMS实例,该实例必须在 Amazon VPC 中的 Amazon EC2 上运行。所有方法都需要迁移服务器来运行 mongodumpmongorestore。通常,在启动 Amazon DocumentDB 集群的 VPC 中的 Amazon EC2 实例上运行迁移服务器会更容易,因为这能够大幅简化与 Amazon DocumentDB 集群的连接。

Testing

以下是迁移前测试的目标:

  • 验证所选方法能否实现期望的迁移结果。

  • 验证实例类型和读取首选项选择是否满足应用程序的性能要求。

  • 验证应用程序在故障转移期间的行为。

迁移计划测试注意事项

在测试 Amazon DocumentDB 迁移计划时,请考虑以下事项。

还原索引

默认情况下,mongorestore 会为转储的集合创建索引,但是在还原数据后创建它们。在将数据还原到集群之前,在 Amazon DocumentDB 中创建索引总体上更快。这是因为索引操作在数据加载期间是并行化的。

如果您选择预先创建索引,则在使用 mongorestore 还原数据时可通过提供 -–noIndexRestore 选项跳过索引创建步骤。

转储数据

mongodump 工具是从源 MongoDB 部署转储数据的首选方法。根据迁移实例上的可用资源,您也许可以通过使用 mongodump 选项增加转储的并行连接数(默认为 4)来加速 –-numParallelCollections

还原数据

这些区域有:mongorestore工具是将转储数据还原到 Amazon DocumentDB 实例的首选方法。您可以通过使用 -–numInsertionWorkersPerCollection 选项增加还原期间每个集合的工作线程数来提高还原性能。Amazon DocumentDB 集群主实例上的每个 vCPU 分配 1 个工作线程是开始的好地方。

Amazon DocumentDB 当前不支持mongorestore工具的--oplogReplay选项。

默认情况下,mongorestore 将跳过插入错误并继续还原过程。如果您将不支持的数据还原到 Amazon DocumentDB 实例,就会发生这种情况。例如,您的文档包含带有空字符串的键或值。如果您希望在遇到任何还原错误时完全停止 mongorestore 操作,请使用 --stopOnError 选项。

Oplog 大小调整

MongoDB 操作日志 (oplog) 是一种受限集合,其中包含对数据库的所有数据修改。您可以通过对副本集或分片成员运行 db.printReplicationInfo() 操作来查看 oplog 的大小及其包含的时间范围。

如果您使用的是在线或混合方法,请确保每个副本集或分片上的 oplog 足够大,以包含在整个数据迁移过程中所做的全部更改(无论是通过 mongodump 还是 Amazon DMS 任务完全加载),以及合理的缓冲区。有关更多信息,请参阅 MongoDB 文档中的 Check the Size of the Oplog (查看 Oplog 的大小)。通过记录 mongodumpmongorestore 进程或 Amazon DMS 完全加载任务首次测试运行所用的时间来确定所需的最小 oplog 大小。

Amazon Database Migration Service 配置

这些区域有:Amazon Database Migration Service用户指南涵盖了将 MongoDB 源数据迁移到 Amazon DocumentDB 集群所需的组件和步骤。以下是使用 Amazon DMS 执行在线或混合迁移的基本过程:

使用 Amazon DMS 执行迁移

  1. 创建 MongoDB 源终端节点。有关更多信息,请参阅使用 MongoDB 作为 Amazon DMS 源

  2. 创建 Amazon DocumentDB 目标终端节点。有关更多信息,请参阅使用 Amazon DMS 终端节点

  3. 创建至少一个 Amazon DMS 复制实例。有关更多信息,请参阅使用 Amazon DMS 复制实例

  4. 创建至少一个 Amazon DMS 复制任务。有关更多信息,请参阅使用 Amazon DMS 任务

    对于在线迁移,迁移任务使用迁移类型 Migrate existing data and replicate ongoing changes (迁移现有数据并复制持续更改)

    对于混合迁移,迁移任务使用迁移类型 Replicate data changes only (仅复制数据更改)。您可以选择 CDC 开始时间以与 mongodump 操作中的转储时间保持一致。MongoDB oplog 是幂等的。为避免遗漏更改,最好在 mongodump 完成时间与 CDC 开始时间之间保留几分钟的重叠时间。

从分片集群迁移

将数据从分片集群迁移到 Amazon DocumentDB 实例的过程基本上是并行迁移多个副本集的过程。测试分片集群迁移时的一个关键考虑因素是某些分片可能比其他分片使用得更频繁。这种情况会导致数据迁移具有不同的运行时间。请务必评估每个分片的oplog规划和测试时的要求。

以下是迁移分片集群时要考虑的一些配置问题:

  • 在运行 mongodump 或启动 Amazon DMS 迁移任务之前,必须禁用分片集群均衡器并等待所有正在进行的迁移完成。有关更多信息,请参阅 MongoDB 文档中的 Disable the Balancer (禁用均衡器)

  • 如果您使用 Amazon DMS 复制数据,请在运行迁移任务之前在每个分片上运行 cleanupOrphaned 命令。如果不运行该命令,任务可能会因为重复的文档 ID 而失败。请注意,该命令可能会影响性能。有关更多信息,请参阅 MongoDB 文档中的 cleanupOrphaned

  • 如果您使用 mongodump 工具转储数据,则应为每个分片运行一个 mongodump 进程。最节省时间的方法可能需要多个迁移服务器来最大限度提高转储性能。

  • 如果您使用 Amazon Database Migration Service 复制数据,则必须为每个分片创建源终端节点。同时为要迁移的每个分片运行至少一个迁移任务。最节省时间的方法可能需要多个复制实例来最大限度提高迁移性能。

性能测试

将数据成功迁移到测试 Amazon DocumentDB 集群后,请对集群执行测试工作负载。通过 Amazon CloudWatch 指标验证性能是否达到或超过 MongoDB 源部署的当前吞吐量。

验证以下关键 Amazon DocumentDB 指标:

  • 网络吞吐量

  • 写入吞吐量

  • 读取吞吐量

  • 副本滞后

有关更多信息,请参阅 监控 Amazon DocumentDB

故障转移测试

验证应用程序在 Amazon DocumentDB 故障转移事件期间的行为是否满足您的可用性要求。要在控制台上启动 Amazon DocumentDB 群集的手动故障转移,请在集群页上,选择故障转移操作上的操作菜单上。

也可以通过从 Amazon CLI 执行 failover-db-cluster 操作来启动故障转移。有关更多信息,请参阅 。 failover-db-clusterAmazon DocumentDB 部分Amazon CLI引用。

其他资源

请参阅 Amazon Database Migration Service 用户指南 中的以下主题: