我们的邮箱地址:

shuddering@msn.com

致电我们:

13594780196

案例中心

  • Home
  • 将 Amazon DocumentDB 从 36 升级到 50,几乎无需停机 数据库博客

将 Amazon DocumentDB 从 36 升级到 50,几乎无需停机 数据库博客

2026-01-27 14:01:51 24

从 Amazon DocumentDB 36 升级至 50 实现近乎零停机时间

作者:Kunal Agarwal 和 Anshu Vajpayee,发布日期:2024年4月5日

重点内容

在本文中,我们将介绍如何将 Amazon DocumentDB 从 36 升级到 50,并实现近乎零停机时间的操作。此升级不仅可以解锁最新功能,还可以利用 Amazon DocumentDB 的文档管理和存储能力,确保高可用性和低成本。

升级概述

Amazon DocumentDB 是一个完全托管的原生 JSON 数据库,设计用于扩展企业工作负载。升级到版本 50 后,您将能够使用相同的 MongoDB API 36、40 和 50 应用程序代码轻松管理工作负载,而无需担心底层基础设施的管理。

使用 Amazon DocumentDB 50,您可以执行主要版本的升级,以解锁新特性,包括支持 向量搜索、I/O 优化存储、文档压缩、文本搜索 和 部分索引 等功能。

在本文中,我们将探讨如何通过 “就地主要版本升级” 和 Amazon DocumentDB 卷克隆 的组合方式,实现从 36 升级到 50 的近乎零停机时间。

备注:要从 Amazon DocumentDB 40 升级至 50 的用户,请参考 Upgrade Amazon DocumentDB 40 to 50 with nearzero downtime。

当前升级选项

目前,Amazon DocumentDB 36 的用户可以通过以下方法将其升级至 Amazon DocumentDB 50:

方法描述mongodump 和 mongorestore使用命令行工具创建二进制备份并将其恢复到新集群,此方法会导致 Amazon DocumentDB 的离线,不适合需要高可用性的工作负载。AWS DMS使用 AWS 数据库迁移服务 迁移数据,可能产生额外费用。就地主要版本升级可以在无需迁移数据的情况下对集群进行升级,但会有一些停机时间,停机时间取决于数据库的数量、集合和索引。

解决方案概述

我们将采用一种混合方法,通过结合使用就地主要版本升级和 Amazon DocumentDB 克隆来实现近乎零的停机时间。该方法可减少与将整个集群数据迁移到新端点相关的 I/O 成本和升级时间。以下步骤简要介绍此解决方案的工作原理:

创建一个 Amazon Elastic Compute Cloud 实例,并安装 Python 和 mongo shell。启用更改流。使用 Amazon DocumentDB MVU CDC 迁移工具 捕获源集群的更改流令牌。克隆 Amazon DocumentDB 集群。在已克隆的集群上执行就地主要版本升级。使用 Amazon DocumentDB MVU CDC 迁移工具复制更改数据捕获CDC。在复制完成后,将应用程序的端点更改为克隆的集群。执行升级后的清理工作。

前提条件

在继续操作之前,您应对 就地主要版本升级 和 卷克隆 有基本了解。此解决方案的成本主要与 Amazon DocumentDB 的更改流和 EC2 实例相关,您可以使用 AWS 定价计算器 来估算相关费用。

在升级 Amazon DocumentDB 集群至更高版本时,请检查任何弃用的特性和操作符,或用法变更。确保应用程序在新版本下正常运行,并确认驱动程序行为与以前的版本一致。

在整个升级过程中,您的源 36 集群仍将在运行,并能服务于应用程序流量。

请注意,切换端点仍会产生一些停机时间。因此,强烈建议在生产环境实施之前,在低环境中进行多次测试运行。

创建带有 Python 和 mongo shell 的 EC2 实例

您可以选择现有的 EC2 实例或配置一个新的实例。此 EC2 实例用于运行脚本以捕获令牌并使用 Amazon DocumentDB MVU CDC 迁移工具移动 CDC。

配置实例安全组以连接至 Amazon DocumentDB 集群端口 27017。在 EC2 实例上安装 mongo shell。如需指导,请参见 安装 mongo shell。

在 Amazon Linux 2 AMI EC2 实例上使用以下命令安装 python、pymongo 和 git。

bashsudo yum install pythonsudo yum install gitsudo pip3 install pymongo

启用更改流

要实现较少停机时间的主要版本升级,需在 Amazon DocumentDB 集群上启用 更改流。更改流提供了集群内按时间顺序排列的更新事件序列。

为确保没有错过事务,设置更改流日志的保留期。默认的保留期为3小时,您可以将其配置在1小时至7天之间。建议将此属性配置为至少24小时。

使用以下 AWS CLI 命令将保留时间增加至24小时:

bashaws docdb modifydbclusterparametergroup dbclusterparametergroupname ltparameter group namegt parameters ParameterName=changestreamlogretentiondurationParameterValue=86400ApplyMethod=immediate

也可以通过 Amazon DocumentDB 控制台 修改更改流保留期。如果您的集群使用的是默认参数组,则需先将其更改为自定义参数组,这需要集群重启。

通过 mongo shell 连接到 Amazon DocumentDB 集群,使用以下命令启用所有数据库的更改流:

bashdbadminCommand({modifyChangeStreams 1database ””collection”” enable true})

要确认更改流的创建,请使用 listChangeStreams 聚合管道阶段列出集群的所有已启用的更改流。有关更多信息,请参考 启用更改流。

捕获集群级更改流令牌

需要运行 Amazon DocumentDB MVU CDC 迁移工具,以捕获集群级的更改流令牌。请按照以下步骤操作:

克隆该库并进入工具文件夹:

bashgit clone https//githubcom/awslabs/amazondocumentdbtoolsgitcd amazondocumentdbtools/migration/mvutool/

轻蜂加速器破解版

下载 Amazon DocumentDB 证书颁发机构CA证书:

bashwget https//truststorepkirdsamazonawscom/global/globalbundlepem

使用 getresumetoken 选项运行 MVU CDC 迁移工具以获取集群级令牌。注意:确保在 sourceclusteruri 中的读取首选项设置不是 secondaryPreferred,因为 Amazon DocumentDB 只支持在主实例上使用更改流。

bashpython3 mvucdcmigratorpy sourceuri lt sourceclusterurigt startposition 0 verbose getresumetoken

工具将在输出中打印令牌,并将令牌记录在 getresumetokenlt timestampgttxt 文件中。

克隆 Amazon DocumentDB 集群

通过 Amazon DocumentDB 克隆,您可以创建一个新集群,该集群使用相同的 Amazon DocumentDB 集群卷并包含与生产集群相同的数据。与通过其他技术如还原快照复制数据相比,克隆的速度更快且更节省空间。

有关使用 AWS CLI 创建克隆的详细信息,请参考 创建 Amazon DocumentDB 克隆。

在 AWS 管理控制台 上创建生产集群的克隆,请按照以下步骤操作:

在 Amazon DocumentDB 控制台的导航窗格中,选择 集群。选择您的 Amazon DocumentDB 生产集群,然后在 操作 菜单中选择 创建克隆。在 集群标识符 中,输入要给予克隆集群的名称例如,cloneddocdbcluster。在与实例、配置、网络设置、静态加密、日志导出、端口和删除保护相关的所有详细信息中,使用与您的 Amazon DocumentDB 集群相同的设置。

有关 Amazon DocumentDB 集群和实例设置的更多信息,请参见 管理 Amazon DocumentDB 集群。

选择 创建克隆 启动 Amazon DocumentDB 集群的克隆。

当克隆创建完成后,它将在 集群 页面中列出,并显示其当前状态。克隆准备好使用的状态为可用。

要在已克隆集群上执行就地主要版本升级

此步骤将已克隆的 Amazon DocumentDB 36 集群升级至 50。在已克隆的集群上执行就地主要版本升级不会产生额外费用。

完成所有前提条件步骤后,您可以进行就地主要版本升级。更多信息请参见 Amazon DocumentDB 就地主要版本升级。

请按照 订阅 Amazon DocumentDB 事件订阅 的步骤来订阅克隆集群的维护事件。然后完成以下步骤以升级集群:

在 Amazon DocumentDB 控制台的 集群 页面上,选择克隆集群,然后在 操作 菜单中选择 修改。在 集群标识符 中,输入您集群的名称。在 引擎版本 中选择 500。指定您的 VPC 安全组或使用现有安全组。在 集群选项 部分,选择适当的默认或自定义聚合参数组,然后选择 继续。在 修改调度 部分,选择 立即应用。选择 修改集群 开始就地升级您的集群。

您的集群状态现在将更改为升级中。完成升级后,集群状态将恢复为可用,并收到 “数据库集群主要版本已升级” 的事件。您还可以通过监控 事件 页面来跟踪升级进度。

在就地主要版本升级完成后,执行完整性检查以确保升级的克隆功能正常,所有数据和索引均完好。

请务必小心,以保证您不在克隆集群上修改任何数据,因为这可能导致数据不一致。

使用 Amazon DocumentDB MVU CDC 迁移工具复制 CDC

本步骤使您的克隆集群与 Amazon DocumentDB 源集群同步,复制克隆创建以来的所有数据库更改。MVU CDC 迁移工具将根据您创建的更改流令牌复制 CDC 更改。它从 Amazon DocumentDB 生产集群读取数据并将其写入目标克隆集群。

由于您已经克隆了 MVU CDC 迁移工具库,可以通过传递更改流令牌运行 mvucdcmigratorpy 工具以迁移更改:

bashcd /amazondocumentdbtools/migration/mvutool/python3 mvucdcmigratorpy sourceuri lt sourceclusterurigt targeturi lt targetclusterurigt startposition lt change stream tokengt verbose

请注意,在 sourceclusteruri 中不要将读取首选项设置为 secondaryPreferred,因为 Amazon DocumentDB 仅支持在主实例上使用更改流。

最终,您的源集群和目标集群将保持同步。您可以通过在集合上运行 count() 操作来验证是否所有更改事件均已迁移。

您还可以使用 Amazon DocumentDB DataDiffer 工具 执行数据验证。

在复制完成后将应用程序端点更改至 50 集群

在确认新的 Amazon DocumentDB 50 集群已同步且所有检查通过后,您可以将应用程序的数据库连接端点从 Amazon DocumentDB 36 集群更改至 Amazon DocumentDB 50 集群。

执行升级后的清理工作

请执行以下步骤来清理您的资源:

删除 Amazon DocumentDB 36 集群。禁用 Amazon DocumentDB 50 生产集群上的更改流,因为更改流设置在克隆操作过程中已复制到 50 集群。删除 EC2 实例。要为 Amazon DocumentDB 50 集群添加额外实例以与 Amazon DocumentDB 生产集群匹配,请选择克隆集群,然后在 Amazon DocumentDB 控制台的 集群 页面上选择 添加实例。复制或设置在 Amazon DocumentDB 36 集群上的监控和警报。

结论

在本文中,我们展示了如何通过使用就地主要版本升级和 Amazon DocumentDB 克隆功能,以最低成本和近乎零停机时间的方式将 Amazon DocumentDB 从 36 升级至 50。

关于作者

Kunal Agarwal 是亚马逊云计算服务的高级产品经理,他热衷于数据并喜欢构建可扩展的产品来解决客户问题。在加入 AWS 之前,Kunal 在技术行业拥有12年的产品管理和战略经验。

Anshu Vajpayee 是 AWS 的高级 DocumentDB 专家解决架构师。他一直在帮助客户采用 NoSQL 数据库,并使用 Amazon DocumentDB 来现代化应用程序。在加入 AWS 之前,他在关系型和 NoSQL 数据库方面拥有丰富的经验。

将 Amazon DocumentDB 从 36 升级到 50,几乎无需停机 数据库博客

发表评论