使用多可用区数据库集群在 Amazon RDS for MySQL 上实现高性能和高可用性的最佳策略

亚马逊关系数据库服务 (Amazon RDS) 中,多可用区部署可以有一个或两个备用数据库实例。 多可用区数据库实例部署 具有单个备用数据库实例,该实例提供故障转移支持,但不提供读取流量。如果部署有两个可读的备用数据库实例,则称为 多可用区数据库集群部署 。多可用区数据库集群部署具有备用数据库实例,这些实例提供故障转移支持,还可以提供读取流量。

多可用区数据库集群部署最适合需要额外读取容量的应用程序工作负载,或者那些对交易延迟敏感且必须具有高可用性的工作负载。除此之外,多可用区数据库集群部署还包括新功能,例如 Amazon RDS 优化写入 ,可将写入事务吞吐量提高多达 2 倍,以及将复杂查询处理速度提高多达 2 倍的 Amazon RDS 优化读取

如果您目前正在计划对运行 MySQL 5.7.x 的现有 Amazon RDS for MySQL 实例进行 主要版本升级,则有机会迁移到 Amazon RDS for MySQL 8.0.x 多可用区数据库集群部署,它可以有效支持您的 RDS for MySQL 工作负载。通过多可用区集群部署,Amazon RDS 支持需要更多读取容量和一致交易延迟的数据库工作负载,同时提供高可用性和耐久性。适用于 MySQL 的 Amazon RDS 8.0.28 及更高版本支持多可用区数据库集群,并且可以在支持 Amazon RDS for MySQL 的所有地区使用。

在这篇文章中,我们将探讨将亚马逊 RDS for MySQL 5.7.x 升级到 MySQL 8.0.x 时的关键注意事项。我们还将讨论如何为现有的 RDS for MySQL 工作负载采用多可用区数据库集群部署,以及与迁移相关的最佳实践。

多可用区数据库集群中引入的主要新功能

Amazon RDS 多可用区数据库集群部署 非常适合生产数据库工作负载。多可用区数据库集群部署使用半同步复制,这需要获得至少一个读取器数据库实例的确认才能提交更改。这意味着,在其中一个副本确认收到事务之前,主服务器不会确认对客户端的提交。如果多可用区数据库集群中的写入数据库实例出现基础设施故障(例如,实例硬件故障、存储故障或网络中断),Amazon RDS 会自动故障转移到不同可用区中的读取器数据库实例。通过在三个可用区中预置一个主数据库实例和两个可读备用数据库实例,多可用区数据库集群支持需要更多读取容量和一致交易延迟的数据库工作负载。备用数据库实例充当自动故障转移目标并提供读取流量。

对于读取密集型工作负载,多可用区数据库集群部署还允许 添加只读副本 ,以 超出集群的计算或 I/O 容量。这允许您将读取流量定向到一个或多个数据库实例只读副本,这些副本可以是单可用区,也可以使用多可用区实例部署。除了多可用区数据库集群拓扑中的两个可读备用数据库外,您还可以从多可用区数据库集群创建最多 15 个只读副本。

适用于 Amazon RDS for MySQL 的多可用区数据库集群部署支持 优化写入 ,即在无需双写缓冲区的情况下将数据刷新到持久存储时,您的 RDS for MySQL 数据库仅写入一次。这可以将数据库的写入事务吞吐量提高多达两倍。RDS 优化写入作为具有 特定实例 类的 Amazon RDS for MySQL 版本 8.0.30 及更高 版本 的默认选项提供。 有关更多信息,请参阅 使用 RDS 优化写入

此外,在多可用区数据库集群部署中,默认情况下, 支持的实例 上的 “ 优化读取 ” 功能处于启用状态。与不使用优化读取的数据库实例相比,使用优化读取的 RDS for MySQL 数据库实例的查询处理速度最多可快两倍。

迁移到多可用区数据库集群部署时的关键注意事项

在计划使用 RDS 多可用区数据库集群时,在准备迁移时需要记住几点。首先要记住的是引擎版本。带有适用于 MySQL 的亚马逊 RDS 的多可用区数据库集群需要适用于 MyS QL 的 Amazon RDS 版本 8.0.28 及更高 版本,而 RDS 优化写入 需要版本 8.0.30 及更高版本。因此,如果您要从适用于 MySQL 的 Amazon RDS 5.7.x 版本进行主要版本升级,您也可以利用这段时间升级到最新的 Amazon RDS for MySQL 版本 8,截至撰写本文时版本为 8.0.33。有关最新版本,请参阅 亚马逊 RDS 上 支持的 MySQL 次要版本 。为了减少主要版本升级期间的停机时间和风险,您还可以使用 RDS 蓝/绿 部署。

要记住的另一件事是多可用区数据库集群部署所支持的数据库实例类。目前,多可用区数据库集群支持 “d” 类型的实例类,例如 db.m5d、db.m6gd、db.r5d、db.r6gd 和 db.x2iedn。有关最新注意事项,请参阅 区域和版本可用性 以及 实例类可用性 。您还可以利用预留数据库实例进行多可用区数据库集群部署。有关更多信息,请参阅 多可用区数据库集群 的 预留数据库实例 。此外,我们建议您在使用多可用区数据库集群部署 时查看当前的 限制 ,以确保从当前架构平稳过渡。

与 MySQL 5.7 相比,MySQL 8.0 引入了多项 更改 ,这可能会导致从 MySQL 5.7 升级到 MySQL 8.0 的过程变得复杂。当您开始升级时,Amazon RDS 会自动运行预检查以检测这些不兼容性。如果存在不兼容性,Amazon RDS 会阻止升级,并提供日志供您了解这些问题。然后,您可以使用该日志减少不兼容性,为升级到 MySQL 8.0 做好数据库准备。因此,建议对数据库进行 必要的准备 ,并进行全面测试以确保顺利成功升级。您可以使用 数据库快照 测试升级, 方法是对已升级 还原实例 运行尽可能多的质量保证测试。升级时,您可以选择亚马逊 RDS for MySQL 支持 的最新 MySQL 8.0 次要版本

从现有单可用区或多可用区实例迁移到多可用区数据库集群部署的选项

现在,您的数据库实例采用了支持的多可用区数据库集群版本和实例类别,让我们回顾一下从现有 RDS for MySQL 单可用区或 RDS for MySQL 多可用区实例部署迁移的迁移选项。

使用停机时间最少的只读副本

就工作量和最大限度地减少停机时间而言,作为最方便的选择之一,您可以 从现有的单 可用区或多可用区数据库实例部署中创建多可用区数据库集群作为只读副本,将其用作复制 源。此操作不仅会处理数据的初始加载,还要为任何更改设置复制,这意味着数据库实例可以在迁移到多可用区数据库集群期间处理写入事务。

对于这种迁移方法,作为先决条件,请在源数据库实例上将 gtid-mod e 和 enforce _gtid_consistency 参数配置为 ON 将现有 RDS for MySQL 实例升级到版本 8.0.28 或更高版本后,可以在相应的 RDS 参数组中设置这些参数。 这两个参数的应用类型都是静态的,因此在参数同步之前需要手动重启。您可以立即重启或等到维护时段。设置参数后,请参阅 创建和提升多可用区数据库集群只读副本 ,了解创建多可用区数据库集 群只读副本的完整步骤。当多可用区数据库副本集群处于 “可用” 状态后,您可以使用 Repl icalag CloudWatch 指标监控复制延迟,并使用 多可用区数据库集群终端节点连接到该集群 , 以执行任何测试,因为从现有 RDS 实例复制是在后端进行的。

准备就绪后,停止将任何事务写入源数据库实例,然后等待对只读副本进行所有更新。您可以 使用 Repl ica Lag 指标 监控复制延迟 。当副本延迟接近零时,您可以将只读副本提升为独立的多可用区数据库集群。您可以使用 亚马逊云科技 管理控制台 、亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 或 Amazon RD S API 创建和提升多可用区数据库集群只读副本。有关为迁移创建和管理多可用区数据库集群只读副本的更多详细信息,请参阅 使用只读副本 迁移到多可用区数据库集群

下图说明了此选项的架构。

Using a read replica

使用亚马逊 RDS 快照

您还可以使用 Amazon RDS 快照和还原选项迁移到多可用区数据库集群选项。由于您已将 Amazon RDS for MySQL 引擎版本升级为使用多可用区数据库集群支持的引擎版本和实例之一,因此您可以将现有的单可用区数据库实例部署或多可用区数据库实例部署的快照恢复到多可用区数据库集群。

您可以 创建数据库快照 或使用现有快照,然后 从中 恢复 以形成新的 RDS 实例。由于您要恢复到 RDS 多可用区数据库集群部署,因此请查看 “设置” 中 用于创建多可用区数据库集群的可用 设置 。 您可以通过控制台或使用 亚马逊云科技 CLI 或 亚马逊云科技 开发工具包执行此操作。

恢复操作可能需要时间,具体取决于数据库的大小。作为可选步骤,如果您的工作负载无法容忍更长的停机时间,则可以将 二进制日志复制 配置 为新的零迁移停机时间。您可以在源 RDS for MySQL 实例 上 启用二进制日志 ,然后运行 SHOW MASTER STA TUS 命令以获取二进制日志位置,您可以从中设置复制。

下图说明了此选项的架构。

使用 mysqldump 和二进制日志复制

无论您是从自我管理的 MySQL 迁移还是从 Amazon EC2 上的自我管理的 MySQL 迁移,并希望使用 MySQL 原生工具迁移到多可用区数据库集群,您也可以使用 mysqldump 等常用逻辑备份工具。 如果您要从现有 RDS for MySQL 单可用区或多可用区实例部署中的旧数据库实例类迁移,则可以使用此方法利用多可用区数据库集群中的优化写入功能。使用此工具,您可以从现有 MySQL 实例中导出架构定义和数据,并将备份恢复到目标多可用区数据库集群。对于较大的数据集,如果您需要近乎零的停机时间迁移,则可以使用 mysqldump 创建备份文件,这些文件不仅包括数据,还包括使用参数 --master-data=2 进行一致备份时的二进制日志位置,如以下示例代码所示:

mysqldump --host=<host_name> --user=<source_user> \
--password=<source_user_password> --databases <database_name> \
--single-transaction --compress --order-by-primary \
--master-data=2 -p<local_password> -r backup.sql

二进制日志复制将允许连续变更数据捕获 (CDC),当副本延迟接近零时,您可以执行切换。有关设置此复制的分步说明,请参阅在 您的外部数据库和新的 Amazon RDS 数据库实例之间 复制

你也可以使用 mydumper 和 myload er 进行多线程迁移。它们提供高级功能,例如使用并行线程转储和加载数据,以及以每表文件的方式创建转储文件。

下图显示了此选项的架构。

结论

当您决定将现有 RDS for MySQL 资源升级到 Amazon RDS for MySQL 8.0.x 上的最新版本时,您也可以使用 RDS 多可用区数据库集群部署选项。此选项支持需要更多读取容量和一致交易延迟的工作负载,同时提供高可用性和耐久性。在这篇文章中,我们讨论了多可用区数据库集群的优势和新的增强功能,以及可能的最小停机时间迁移方法。

通过访问 Amaz on RDS 控制台 创建 新的 RDS 实例,或者通过将数据库引擎版本升级到 支持 的 MySQL 版本来 迁移 现有的 RDS 实例,您可以立即开始使用带有两个可读备用数据库的多可用区数据库集群部署。


作者简介

Shagun Arora 是亚马逊网络服务的数据库专家解决方案架构师。她与客户合作,在 亚马逊云科技 云中设计可扩展、高度可用和安全的解决方案。

Vijay Karumajji 是亚马逊网络服务的首席数据库解决方案架构师。他与我们的客户合作,为数据库项目提供指导和技术援助,帮助他们在使用 亚马逊云科技 时提高解决方案的价值。


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