[SEO 副标题]
本指南将展示如何利用“组复制”插件配置多达九个 Amazon Relational Database Service(Amazon RDS)for MySQL 实例的主动-主动复制。使用所提供的 AWS CloudFormation 堆栈和脚本,您可以实施一个多主模式拓扑,以实现应用程序的持续可用性。写入操作分布在主动-主动集群中的多个数据库实例上,最大限度地提高了可用性并减小了写入延迟。
请注意:[免责声明]
架构图
[架构图描述]
步骤 1
需要现有的 Amazon Relational Database Service(Amazon RDS)for MySQL 实例,才能部署本指南。源应用程序运行在 Amazon Elastic Compute Cloud(Amazon EC2)、Amazon Elastic Kubernetes Service(Amazon EKS)、Amazon Elastic Container Service(Amazon ECS)上或者您选择的环境中。
在本指南中,我们假设应用程序是通过 Amazon EC2 实例跨多个可用区(AZ)部署的。可以使用默认的 Amazon Key Management Service(AWS KMS)或客户管理的密钥对 Amazon RDS for MySQL 实例进行加密。
步骤 2
满足先决条件之后,AWS CloudFormation 堆栈将创建 RDS for MySQL 实例、ProxySQL 和网络负载均衡器等资源。此外,还将部署 Amazon Simple Notification Service(Amazon SNS)主题、AWS Lambda 函数和 Amazon EventBridge 规则。
- 2a:网络负载均衡器会自动将来自应用程序的传入流量分配到一个或多个可用区中的多个目标,例如 Amazon EC2 实例上的 ProxySQL。
- 2b:ProxySQL 将流量重定向到“组复制”集群的活动数据库实例。
步骤 3
创建 Amazon CloudWatch 警报以监控 RDS 故障事件(例如数据库实例关闭、重新启动、失效转移或故障),并通过 Amazon SNS 主题发送通知。
步骤 4
配置 EventBridge 规则以监控 RDS 故障事件(例如数据库实例关闭、重新启动或故障),并通过 Amazon SNS 主题发送通知。该规则还会在事件发生时调用 Lambda 函数。
步骤 5
Lambda 函数提供了一个框架,用来在 RDS 故障事件期间添加任何其他功能。可以添加的一些功能包括但不限于:
- 如果“组复制”拓扑中的一个实例重新启动,则确认已将重新启动的数据库实例重新加入到“组复制”拓扑中。
- 如果升级了“组复制”拓扑中的一个实例,此数据库实例将处于 read_only 模式。在这种情况下,升级复制拓扑中的其他数据库实例。
- 利用 MySQL 性能架构表定期执行运行状况检查,如果一个数据库实例处于暂停状态,则将流量重定向到“组复制”拓扑中的其他数据库实例。
开始使用
Well-Architected 支柱
当您在云中构建系统时,AWS Well-Architected Framework 可以帮助您了解所做决策的利弊。框架的六大支柱使您能够学习设计和操作可靠、安全、高效、经济高效且可持续的系统的架构最佳实践。使用 AWS 管理控制台中免费提供的 AWS Well-Architected Tool,您可以通过回答每个支柱的一组问题,根据这些最佳实践来检查您的工作负载。
上面的架构图是按照 Well-Architected 最佳实践创建的解决方案示例。要做到完全的良好架构,您应该遵循尽可能多的 Well-Architected 最佳实践。
-
卓越运营
RDS for MySQL、EventBridge、Amazon SNS 和 AWS CloudTrail 可帮助您跟踪和审查日志和信息,以便快速执行错误审查和事件响应。具体而言,RDS for MySQL 允许您在 RDS for MySQL 数据库实例之间设置多主模式,以便为应用程序提供持续可用性。
-
安全性
弹性负载均衡(ELB)自动将您的传入流量分配给多个目标;它将监控它的注册目标的运行状况,并只将流量路由到运行状况良好的目标。本指南使用 AWS KMS 提供默认加密,并可选择使用自定义的 KMS 密钥。RDS for MySQL 的加密数据库实例对底层存储、备份、副本和快照进行加密,以提供一层额外的数据保护。最后,考虑使用 AWS Identity and Access Management(IAM)等基于身份的策略保护您的资源。
-
可靠性
RDS for MySQL 通过跨多个可用区复制数据提供高可用性,“组复制”插件提供数据弹性。要为 RDS 快照提供持久存储,请使用 Amazon Simple Storage Service(Amazon S3)保护关键数据存储。
ELB 会自动在一个或多个可用区中的多个目标(例如 Amazon EC2 实例、容器和 IP 地址)中自动分配传入的流量。它将监控它的注册目标的运行状况,并只将流量路由到运行状况良好的目标,以提高应用程序的可用性。当您的传入流量随时间变化时,ELB 会扩展您的负载均衡器。
最后,CloudFormation 会自动部署资源并预置出现故障时的回滚功能,以便在出现故障时提供可靠性。
-
性能效率
使用 RDS for MySQL 中的“组复制”插件以及“事务大小”和“跟踪控制”等配置,优化应用程序的性能和复制吞吐量。此外,通过使用 ProxySQL 在 RDS 数据库实例之间拆分读写操作,可进一步增强应用程序的性能。此外,Lambda 和 EventBridge 是可扩展、可自定义的服务,可帮助您维护主动-主动集群拓扑。
-
成本优化
使用 RDS for MySQL,您可以部署具有经济高效且可调整大小的硬件容量的可扩展 MySQL 服务器。使用 ELB,您只需按实际使用量付费。最后,广泛而深入的 Amazon EC2 实例产品组合与 Amazon EC2 Auto Scaling 相结合,可帮助您根据业务需求定制计算资源,并根据观察到的需求纵向扩展和缩减容量。
-
可持续性
Amazon EC2 的自动扩缩功能有助于根据应用程序需求调整资源,从而最大限度地减少浪费并提高可持续性。我们建议对 RDS for MySQL 使用基于 Graviton 的 Amazon EC2 实例,以便在实现与基于 x86 的同类实例相同的性能时减少多达 60% 的能耗,从而减少您的碳足迹。此外,由于能够停止和启动 RDS for MySQL 数据库实例,无需运行资源即可执行临时测试或日常开发活动。
相关内容
用于在 Amazon RDS for MySQL 上进行主动-主动复制的“组复制”插件简介
免责声明
示例代码;软件库;命令行工具;概念验证;模板;或其他相关技术(包括由我方人员提供的任何前述项)作为 AWS 内容按照《AWS 客户协议》或您与 AWS 之间的相关书面协议(以适用者为准)向您提供。您不应将这些 AWS 内容用在您的生产账户中,或用于生产或其他关键数据。您负责根据特定质量控制规程和标准测试、保护和优化 AWS 内容,例如示例代码,以使其适合生产级应用。部署 AWS 内容可能会因创建或使用 AWS 可收费资源(例如,运行 Amazon EC2 实例或使用 Amazon S3 存储)而产生 AWS 费用。
本指南中提及第三方服务或组织并不意味着 Amazon 或 AWS 与第三方之间存在认可、赞助或从属关系。AWS 的指导是一个技术起点,您可以在部署架构时自定义与第三方服务的集成。