使用 Amazon Aurora 全球数据库构建弹性多区域应用程序 数据库博客
利用亚马逊Aurora全球数据库构建弹性多区域应用程序
文章重点
在构建要求高弹性的多区域应用时,选择合适的数据库是关键,亚马逊Aurora全球数据库提供快速的数据跨区域复制能力,有助于在区域故障时提高应用的可用性。本文将展示如何使用Aurora全球数据库构建可靠的多区域应用及其最佳实践。
能够在AWS区域之间快速恢复的应用程序需要一个适合的数据管理解决方案,以在意外区域故障的情况下增加应用的可用性。部署多区域灾难恢复是一项复杂的任务,需要仔细的设计和实施,以确保数据不会丢失或掉落。而亚马逊Aurora全球数据库则简化了这一过程。本篇文章将展示如何利用Aurora全球数据库构建弹性多区域应用,以及相关的最佳实践。
灾难恢复策略概览
商业和政府客户出于各种原因在数据中心部署应用程序,而灾难恢复DR是常见的需求。要了解不同的DR策略,可以参考云中的灾难恢复选项。本次文章讨论的是使用Aurora全球数据库的热备份策略。通过这种方式,您可以在主要区域运行读/写工作负载,并有选择性地在次要区域运行读工作负载。
对于需要接近零停机时间的关键任务应用,承受整个区域故障的能力至关重要。Aurora全球数据库专为全球分布的应用设计,允许单个亚马逊Aurora数据库跨多个区域扩展。它采用基于存储的复制,通常延迟不到1秒,而您可以在通常1分钟内将次要区域提升为主要区域,以处理读写工作负载。
Aurora全球数据库支持全球写入策略。通过此功能,您可以使次要区域的数据库接受写入。次要区域的写入请求将被转发到主要区域。下图说明了全球写入策略的架构。
整个工作流程包括以下步骤:
应用程序将数据写入Aurora次要集群。次要集群通过写转发将数据转发到Aurora主要集群。主要集群将数据存储在数据库中。主要集群将更新复制到次要集群。数据更新现已在次要集群中可用。通过Aurora全球数据库,单个Aurora数据库可以跨多个区域,提供灾难恢复能力,防御区域范围的故障,同时为全球分布的应用提供快速本地读操作。借助写转发功能,您的应用可以将读写请求发送到次要区域的读取节点,而Aurora全球数据库则负责将写入请求转发至主要区域的写入节点。您还可以使用不同的一致性级别以满足应用的需求。Aurora全球数据库解决了应用在读取和写入时维护多个数据库端点的难题。在某个区域内运行的应用程序只能从该区域的数据库读取和写入。
利用全球数据库,您可以扩展数据库读取并通过让数据更接近用户来减少延迟,以实现全球分布的应用。这种模式为一个全球业务连续性计划奠定了基础,其恢复点目标RPO通常为1秒,而恢复时间目标RTO通常为1分钟。
解决方案概述
在本篇文章中,我们将使用一本书评处理应用程序来演示使用Aurora全球数据库跨区域设置的全球写入策略。此应用程序将处理存储在亚马逊简单存储服务Amazon S3中的书评数据,并将数据写入数据库。该应用程序使用无服务器架构服务,如亚马逊S3、AWS Lambda和AWS Step Functions。所有这些组件将在两个区域useast1 和 useast2中部署。书评应用程序包括以下组件:
书评状态机 Step Functions状态机帮助协调书评处理,调用Lambda函数按块读取Amazon S3中的书评文件,并处理和持久化书评到数据库。书评预处理 此Lambda函数从该区域的S3存储桶中检索待处理的书评文件。书评数据库处理 此Lambda函数处理包含书评的JSON文件并将数据持久化到Aurora数据库。数据库写入会发送到该区域的Aurora数据库集群。书评后处理 此Lambda函数将处理后的文件从bookreview/reviews前缀移动到bookreview/completed,以标记文件处理为完成。下图展示了解决方案架构。
请参阅前提条件章节以了解实现解决方案所需的软件和工具。此外,请了解该解决方案会产生费用,并确保在完成实验后清理资源。
创建Aurora全球数据库
Aurora是一种完全托管的关系数据库服务,兼容MySQL和PostgreSQL。在本篇文章中,我们使用亚马逊Aurora MySQL兼容版数据库引擎。然而,该解决方案同样适用于亚马逊Aurora PostgreSQL兼容版。我们选择useast1和useast2作为区域。您可以选择任何其他支持Aurora全球数据库的区域。有关创建全球数据库的更多信息,请参阅开始使用亚马逊Aurora全球数据库。
配置主要区域中的资源
在主要区域中,您需要设置亚马逊弹性计算云Amazon EC2安全组和主要Aurora数据库。请按照以下步骤操作:
在Amazon EC2控制台,创建主要Aurora数据库的安全组,并启用从VPC CIDR范围的TCP MySQL和Aurora流量的入站选项。在Amazon RDS控制台,创建新的Aurora数据库。选择标准创建。在引擎类型中,选择AuroraMySQL兼容。选择最新可用的SQL引擎版本。在DB集群标识符中,输入您集群的名称。在凭据管理中,选择自我管理。选择自动生成密码。记录此密码;您将稍后使用它来设置数据库和表,以及配置AWS Secrets Manager以安全存储密码。
在集群存储配置中,选择Aurora标准。选择dbr5large实例类型或您选择的其他实例类型。保留其余部分的默认选项。在连接性部分,选择您在第1步中创建的安全组。选择创建数据库。该步骤可能需要最多10分钟才能完成;在主要区域中数据库创建完成后再进行下一步。
在次要区域中配置资源
在次要区域中,您需要为次要Aurora数据库创建安全组并在Secrets Manager中配置一个密钥。请按照以下步骤操作:
在Amazon EC2控制台,切换到次要区域,并为次要Aurora数据库创建一个安全组,允许来自该区域的VPC CIDR范围内TCP MySQL和Aurora流量的入站选项。切换回主要区域并打开Amazon RDS控制台。在导航面板中选择数据库。选择您之前创建的区域集群,然后在操作菜单中选择添加AWS区域。在AWS区域下,选择您要创建Aurora集群的次要区域。在实例配置部分,选择与主要区域相同的实例类型。在连接性部分,为现有VPC安全组选择在次要区域创建的安全组。在读取副本写入转发下,选择启用全局写入转发。选择添加区域,以创建次要数据库。有关更多信息,请参阅开始使用亚马逊Aurora全球数据库。
在Secrets Manager中创建数据库密钥
请按照以下步骤在Secrets Manager中创建密钥:
在主要区域,打开Secrets Manager控制台并选择存储新密钥以创建密钥。选择亚马逊RDS数据库的凭据。输入用户名为admin,并输入密码。选择您创建的数据库。选择下一步。输入密钥名称例如,aurora/globaldbblogsecret。选择下一步以完成配置。在次要区域重复该步骤。创建数据库模式和书评表
您可以通过AWS Cloud9或EC2堡垒主机连接到主要Aurora数据库。因为数据库不是公开的,所以您必须从虚拟私有云VPC内访问。有关设置实例的说明,请参考创建和连接MySQL数据库实例。在以下代码中,将替换为主要数据库的端点。您可以在Amazon RDS控制台的连接性与安全性部分找到端点详细信息。当您连接时,输入以下命令以创建一个书评数据库和表:
bashmysql h ltendpointgt P 3306 u admin pshow databasescreate database reviewsdbuse reviewsdbCREATE TABLE reviews (id int NOT NULL AUTOINCREMENToverallrating double DEFAULT NULLverified tinyint(1) DEFAULT NULLreviewtime varchar(50) DEFAULT NULLreviewerid varchar(100) DEFAULT NULLasin varchar(100) DEFAULT NULLreviewername varchar(500) DEFAULT NULLreviewtext mediumtextsummary varchar(1000) DEFAULT NULLunixreviewtime varchar(100) DEFAULT NULLoverall float DEFAULT NULLreviewerid varchar(255) DEFAULT NULLunixreviewtime varchar(255) DEFAULT NULLvote varchar(20) DEFAULT NULLcreatedat DATETIME DEFAULT CURRENTTIMESTAMPPRIMARY KEY (id))show tables
部署数据处理微服务
您可以从GitHub仓库克隆该项目,并通过您本地系统或AWS Cloud9从AWS进行应用程序的部署。请遵循部署说明完成部署。
永久免费加速器下载在以下代码中提供您主要区域和次要区域的VPC ID:
jsonuseast1 {DBSecretName aurora/globaldbblogsecretVpcID }
useast2 {DBSecretName aurora/globaldbblogsecretVpcID }
转到层目录并运行以下命令以构建Lambda函数所需的pymysql层:
bash/buildPySQLLayersh
运行以下AWS云开发工具包AWS CDK命令以使用您选择的主要区域部署应用程序:
bashexport AWSREGION=useast1npm updatecdk synthcdk deploy
上述命令可能需要最多10分钟才能完成。

应用部署完成后,继续在次要区域的部署:
bashexport AWSREGION=useast2cdk deploy
以下AWS资源将在主要区域和次要区域中创建:
S3桶名称以bookreviewstackbookreviews开头三个Lambda函数Step Functions状态机AWS身份与访问管理IAM角色和策略VPC端点测试解决方案
您可以使用该应用程序处理JSON文件并同时从两个区域向数据库处理并发写入来测试解决方案。
上传测试数据到S3桶
运行脚本testdatasetupsh以在S3桶中设置测试数据。确保更新脚本以将和替换为主要区域和次要区域的S3桶名称。
启动Step Functions任务
登录到useast1的Step Functions控制台并运行作业bookreviewsstatemachine。切换到次要区域并运行Step Functions作业。这将开始处理两个区域的书评。
整个工作流程包括以下步骤:
bookreviewspreprocesslambda列出该区域S3桶中的bookreviews/reviews前缀下的文件。bookreviewsdbprocessinglambda处理文件,读取文件中所有书评条目,并将书评写入数据库。此步骤将循环执行,直到所有文件被处理完。bookreviewspostprocesslambda将处理过的文件从bookreview/reviews前缀移动到bookreview/completed,以标记文件已经完成处理,避免重复处理。bookreviewshasmorefiles在bookreviews/reviews前缀中查找文件。如果找到任何文件,处理流程将从第1步重复执行。下图展示了状态机工作流程。
当作业完成时,工作流程如下所示。
监控
您可以设置亚马逊CloudWatch度量标准和仪表板,以监控Aurora跨区域的复制。有关说明,请参阅使用Amazon CloudWatch Metrics Insights监控亚马逊Aurora全球数据库的复制。设置仪表板后,您可以监控Aurora全球复制延迟。
在我们的测试中,两个区域的Step Functions任务在1分钟14秒内完成,处理超过600000条记录。我们在此测试中观察到Aurora全球复制延迟低于200毫秒。下方截图展示了这些指标。
建议
写入转发功能避免了写入冲突,因为写入请求都是从次要区域转发到主要区域,然后根据您为写入转发设置
发表评论