使用 亚马逊云科技 DMS 升级您的亚马逊 DocumentDB 集群

在快节奏的数字环境中,企业严重依赖其数据存储来管理关键信息,因此其无缝运行不可或缺。随着技术的发展,应用程序变得至关重要,为这些企业提供支持的数据库也是如此。这需要定期升级以保持最佳性能和安全性。尽管升级提供了增强的功能,但挑战在于确保在此过程中不间断地运行。

在这篇文章中,我们将探讨 亚马逊 DocumentDB( 兼容 MongoDB)版本升级路径,重点介绍 使用 亚马逊云科技 数据库迁移服务 (亚马逊云科技 DMS) 将 Am azon DocumentDB 3.6/4.0 升级到 5.0 时的基本注意事项。

升级路径

Amazon DocumentDB 提供了一系列升级路径,可满足不同的需求和场景,提供灵活性和选项以确保高效的升级流程。

在撰写本文时,你可以使用 mongodump 和 m ongorestore 等 命令行实用程序 升级你的 Amazon Docum entDB 集群。 mongodump 实用程序创建数据库的二进制备份。然后,您可以使用 m ongorestore 实用程序将该备份恢复 到新的 Amazon DocumentDB 5.0 集群。有关其他详细信息 ,请参阅转 储、恢复、导入和导 出数据 。备份和恢复时间取决于数据集的大小,如果您需要升级大型集群,这可能会延长停机时间。这种方法非常适合较低的环境(开发和测试)以及存在足够大的迁移维护时段的中小型数据集。

或者,Amazon DocumentDB 提供数据可移植性并支持通过 亚马逊云科技 DMS 进行迁移。亚马逊云科技 DMS 是一项托管迁移服务,可帮助您将数据库工作负载迁移到 亚马逊云科技 以及在 亚马逊云科技 内迁移,同时最大限度地减少停机时间。

亚马逊云科技 DMS 使您可以直接将早期的 Amazon DocumentDB 版本、关系数据库和非关系数据库迁移到您的目标 Amazon DocumentDB 集群。使用 亚马逊云科技 DMS,您无需安装代理或更改源数据库;您可以在 亚马逊云科技 管理控制台 上对其进行管理和 配置。亚马逊云科技 DMS 是一项托管服务,可用于执行以下操作:

  • 将现有数据从源数据库迁移到目标数据库
  • 复制正在进行的数据库更改

先决条件

我们假设您有以下先决条件:

  • 有关亚马逊 DocumentDB 和 亚马逊云科技 DMS 的背景知识
  • 与您的 亚马逊云科技 账户中的资源进行交互的适当权限

该解决方案涉及设置和使用 亚马逊云科技 资源,因此将在您的账户中产生费用。有关更多信息,请参阅 亚马逊云科技 定价 。我们强烈建议您在非生产实例中进行此设置并运行端到端验证,然后再在生产环境中实施此解决方案。

发现

升级到更高版本的 Amazon DocumentDB 集群时,请检查是否存在任何过时的功能和运算符或使用方法的变化。在较新的版本上运行应用程序,并确保其行为和性能与先前版本相同,除非对应用程序进行了有意的修改。

目标集群注意事项

作为迁移的最佳实践,我们建议在迁移过程中调整目标集群的大小(以加快迁移速度),然后在验证过程中缩小目标集群的大小。在实际迁移之前进行的试验中,需要验证扩大规模以及对整体迁移时间产生多大影响。

使用 亚马逊云科技 DMS 进行升级

升级需要一种经过验证的机制,以便在最短的时间内准确地同步数据并切换到目标集群。亚马逊云科技 DMS 通过两个关键组件实现了这一点:

  • 满载 — 您可以使用 亚马逊云科技 DMS 复制整个集群或特定集合。 为了缩短迁移时间,满负载可以同时同步多个集合,并使用 亚马逊云科技 DM S 分段功能并行处理加载过程。
  • 更改数据捕获 -初始数据加载后,您需要保持源集群和目标集群同步,直到实际切换。亚马逊云科技 DMS 变更数据捕获 (CDC) 使用亚马逊 DocumentDB 变更流来确保所有更改都镜像到目标 Amazon DocumentDB 集群。

在源集群上启用变更流

要执行升级,亚马逊云科技 DMS 需要访问源集群的 更改流 , 以提供集群集合中发生的按时间顺序排列的更新事件顺序。变更流使 亚马逊云科技 DMS 能够执行 CDC 并将增量更改应用于目标 Amazon DocumentDB 集群。在源集群上运行以下命令,相应地替换数据库和集合名称:

Db.adminCommand({modifyChangeStreams: 1,
    database :” <DBName>“,
    collection:” <Collection Name>”,
    enable: true});

对要复制的每个集合重复此操作。

更新变更流保留时长

根据您的交易、网络连接和更改频率,您可以相应地设置日志保留期限。更改流日志的保留期限可以设置为 1 小时到 7 天之间的值。默认值为 3 小时。例如,如果您预计使用 亚马逊云科技 DMS 迁移您的 Amazon DocumentDB 集群需要 12 个小时,则应将变更流保留时间设置为 18—24 小时,以考虑任何其他运营开销。为简单起见,您可以选择最长保留期限。将日志保留时间设置为较低的值可能会导致目标 DocumentDB 集群中丢失事务。

您可以通过修改与您的集群关联的集群参数组中的 change_stream_ log_retention_duration 参数的值来设置变更流保留时间 。如果您使用的是 亚马逊云科技 命令行接口 (亚马逊云科技 CLI),请运行以下命令:

aws docdb modify-db-cluster-parameter-group \
--db-cluster-parameter-group-name sample-parameter-group \
--parameters "ParameterName=change_stream_log_retention_duration,
 \ ParameterValue=<parameter-value>,ApplyMethod=immediate"

请注意,I/O 和存储成本与变更流有关。更多详情,请参阅 亚马逊 DocumentDB(兼容 MongoDB)的定价。 因此,请务必在迁移后关闭源集群中的变更流。

在目标集群中创建索引

您可以使用 Amazon DocumentDB 索引工具 在目标集群中创建索引,以匹配源集群中的索引。应在加载数据之前创建索引。在数据加载后生成索引将导致更长的处理时间。

首先,使用以下命令从源集群中转储索引:

python migrationtools/documentdb_index_tool.py --dump-indexes --uri \ 
mongodb://sample-user:\ user-password@sample-source-cluster.node.us-east 1.docdb.amazonaws.com:27017/ \
?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'
\ --dir ~/index.js/ \

成功导出索引后,您可以在目标集群中恢复这些索引:

python migrationtools/documentdb_index_tool.py --restore-indexes --uri \
mongodb://sample-user:user-password@sample-destination-cluster.node.us-east 1.docdb.amazonaws.com:27017/ \
?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false' \
--dir ~/index.js/

要确认已正确恢复索引,可以在 mongo shell 中运行以下命令,相应地替换数据库和集合名称:

<DBName>.<Collection Name>.getIndexes()

创建复制实例

亚马逊云科技 DMS 复制引擎是在您的复制实例上运行并执行迁移任务的核心软件。引擎版本应为 3.5.1 或更高版本。

亚马逊云科技 DMS 始终在 VPC 中创建复制实例。您可以指定复制实例所在的 VPC。您可以为账户和区域使用默认 VPC,也可以创建新的 VPC。出于性能、可靠性和安全原因,亚马逊云科技 DMS 复制实例通常放置在目标 VPC 而不是源 VPC 中。确保为复制实例的 VPC 分配的弹性网络接口与安全组相关联。此外,请确保该安全组的规则允许所有端口上的所有流量离开(出口)VPC。

为确保您的复制实例有足够的资源来执行迁移,请检查您的实例对 CPU、内存、交换文件和 IOPS 的使用情况。有关监控的更多信息,请参阅 亚马逊云科技 数据库迁移服务指标。

要创建您的复制实例,请完成以下步骤。有关完整说明,请参阅 创建 亚马逊云科技 DMS 复制实例

  1. 在 亚马逊云科技 DMS 控制台上, 在导航窗格中选择 复制实例
  2. 创建新的复制实例。
  3. 提供名称、可选 ARN 和可选描述。
  4. 选择您的实例类和引擎版本。

Figure 1

配置 亚马逊云科技 DMS 终端节点

亚马逊云科技 DMS 任务是实际迁移发生的地方。您可以指定整个集合或架构,也可以选择自己喜欢的集合或架构。亚马逊云科技 DMS 使用终端节点访问源和目标数据库,并将数据从源迁移到目标终端节点。完成以下步骤,在复制实例中创建源终端节点和目标终端节点:

  1. 在 亚马逊云科技 DMS 控制台的导航窗格 中的 迁移数据 下,选择 终端节点
  2. 选择 创建端点

Figure 2:

  1. 对于 端点类型 ,选择 源端点
  2. 端点标识符 中 ,输入终端节点的名称。
  3. 对于 源引擎 ,选择 亚马逊 DocumentDB(兼容 MongoDB )。
  4. 对于 “ 访问端点数据库 ” ,选择 “ 手动 提供访问信息 ”, 然后输入源服务器名称、端口、用户名和密码。

Figure 3:

  1. 如果您在 DocumentDB 集群中启用了 TLS,请 将安全套接字层强制执行类型 配置 为 验证完整 , 并添加与您的集群关联的 CA 证书。

您可以从 Amazon DocumentDB 集群的 “ 连接和安全 ” 选项卡中获取该信息。

Figure 4:

  1. 展开 “ 测试端点连接 ” 部分。
  2. 指定您的 VPC 和复制实例。
  3. 选择 “ 运行测试 ” 。

Figure 5:

  1. 测试成功完成后,选择 创建端点
  2. 重复这些步骤以创建目标端点( 为 端点类型选择 目标 端点 )。

创建 亚马逊云科技 DMS 迁移任务

迁移任务告诉复制实例需要将哪些数据复制到目标集群。要创建 亚马逊云科技 DMS 迁移任务,请完成以下步骤:

  1. 在 亚马逊云科技 DMS 控制台上, 在导航窗格的 迁移数据 下,选择 数据库迁移任务
  2. 选择 “ 创建任务 ” 。

Figure 6:

  1. 输入任务标识符。
  2. 选择您创建的复制实例。
  3. 输入源端点和目标端点。
  4. 对于 迁移类型 ,选择 迁移现有数据并复制正在进行的更改

Figure 7:

  1. 在 “ 任务设置 ” 中 ,选择 “ 在目标上 删除表 ” 。
  2. 对于 任务日志 ,选择 打开 CloudWatch 日志
  3. 表映射 部分中,选择 添加新的选择规则
  4. 源名称 中 ,输入数据库的名称。
  5. 源表名中 ,输入集合的名称。

您可以使用特定的名称或通配符匹配来选择多个集合和数据库。

Figure 8:

  1. 取消选中 “启用迁移前评估 ”。

对于大型表,可以考虑将它们拆分成单独的任务并使用 分段 。您可以使用 亚马逊云科技 DMS 分段分析器 来生成手动分段边界。

  1. 选择 “ 创建任务 ” 。

几分钟后,您应该看到您的任务在 “加载完成,正在进行复制” 状态下运行。要检查数据迁移的进度,请在迁移任务中查看表的 “ 统计信息 ” 选项卡。

监控

您可以使用 亚马逊 CloudWatch 日志来监控您的 亚马逊云科技 DMS 任务的进度和相关的资源使用情况。CPU、内存和 IOPS 使用率等指标在成功迁移中起着至关重要的作用。有关更多详细信息,请参阅 亚马逊云科技 DMS 关键故障排除指标和性能增强器

验证

要进行数据验证,您可以使用 Amazon DocumentDB DataDiffer 工具 ,该工具可以检查数据数量和内容。请记住,此过程可能很耗时,因此在规划阶段分配足够的时间很重要。或者,如果您有可用的客户数据验证应用程序,则可以考虑改用它。以 dataDiffer 工具为例。

如果源和目标之间不匹配,则可以 启用审计 。但是,您应该意识到成本和性能的权衡。

考虑在源集群和目标集群上启用审计日志,以检测数据不匹配并隔离未按预期运行的操作。请务必注意,启用审计日志记录可能会占用大量资源。因此,只有在绝对必要的情况下,才应谨慎地在生产环境中使用它,以最大限度地减少对性能的不利影响。在集群上启用审计分为两个步骤:

  1. 将 参数组中的 a udit_log s 参数修改为 全部。 a udit_logs 参数 是以逗号分隔的要记录 的事件列表。
  2. 允许亚马逊 DocumentDB 将日志导出到 CloudWatch。以下代码修改了集群示例集群并启用 CloudWatch 审计:
aws docdb modify-db-cluster \
--db-cluster-identifier sample-cluster \
--cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit"]}'

清理

为确保有效的资源管理,请不要忘记删除任何未使用的 亚马逊云科技 DMS 实例和源集群。完成迁移过程后,如果您启用了审计,请禁用审计,并将变更流保留期设置回其先前的值。如果在迁移之前未在源上启用变更流,则禁用更改流。

摘要

在这篇文章中,我们演示了如何将 Amazon DocumentDB 3.6/4.0 升级到 5.0,同时最大限度地减少停机时间。此方法可以避免回滚,因为您可以在将应用程序指向新集群之前验证数据。此外,您应该确保尽早发现依赖关系和影响,确认假设,并通过概念验证阐明风险,并且应该为升级和应用程序启动制定可靠的计划。

如果您对此帖子有任何意见或疑问,请在评论部分提交


作者简介

Image1 Murali Sankar 是总部位于纽约的 亚马逊云科技 的高级解决方案架构师。他是技术爱好者,热衷于解决复杂的业务问题,与组织合作在 亚马逊云科技 上设计和开发架构,并为他们的云之旅提供支持。在他的整个职业生涯中,Murali 一直致力于帮助客户应对与数据库相关的挑战,包括迁移、设计和性能优化。

谢丽尔·约瑟夫 是 亚马逊云科技 的高级解决方案架构师。她热衷于解决技术挑战。她喜欢指导和帮助他人了解他们追求科技专业人士职业的潜力。她喜欢公开演讲。她在领导多个适用于大型企业应用程序的复杂、高度可靠和可大规模扩展的软件解决方案方面拥有 20 多年的丰富经验。

苏拉夫·比斯瓦斯 是 亚马逊网络服务(亚马逊云科技)的资深DocumentDB专家解决方案架构师。他一直在帮助 亚马逊云科技 DocumentDB 客户成功采用该服务并围绕该服务实施最佳实践。在加入 亚马逊云科技 之前,他曾广泛担任多家 NoSQL 供应商的应用程序开发人员和解决方案架构师。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您发展海外业务和/或了解行业前沿技术选择推荐该服务。