使用 亚马逊云科技 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 供应商的应用程序开发人员和解决方案架构师。