使用 AWS 应用程序自动缩放为 Amazon Aurora 副本安排缩放 数据库博客

使用 AWS 应用自动扩缩对 Amazon Aurora 复本进行计划扩缩

关键要点

本文将介绍如何使用 AWS 应用自动扩缩来按照计划调整 Amazon Aurora 复本的数量。随着应用程序的增长,数据库的负载也会增加,因此需要根据需求步调整数据库容量。此外,本文还会提供 AWS CloudFormation 模板以提高可扩展性。

在这篇文章中,我们演示了如何修改 Amazon Aurora 的读取器自动扩缩配置,利用 AWS 应用自动扩缩 在现有自动扩缩政策之上进行调整。随著应用程序的增长,数据库的负载通常也会随著增加。无论是需要的连接数量、存储数据的量还是处理能力的提升,数据库都应能够随著需求进行扩展。解决此情境的一种可能方案是定期调整数据库的扩缩计划。

解决方案概览

Amazon Aurora 允许自动扩缩灵活调整 Aurora DB 群集的读取器实例数量。Aurora 支持在单个 Aurora 群集中拥有最多 15 个低延迟的读取副本,它们共享相同的基础群集卷。自动扩缩可在需要时管理突增的工作负载,并在工作负载减少时帮助去配置额外的资源,从而节省不必要的 DB 实例费用。

应用自动扩缩允许您根据为 Aurora DB 群集定义的条件自动调整可扩展资源,利用以下功能:

目标跟踪扩缩政策步骤扩缩政策计划扩缩

然而,无法从 AWS 管理控制台 设置和执行计划扩缩。在这篇文章中,我们讨论如何使用应用自动扩缩 CLI 计划 Aurora 读取器的扩缩。我们还提供了一个 AWS CloudFormation 模板供您使用,以便计划扩缩。您可以根据业务需求编辑该 CloudFormation 模板。

应用自动扩缩

了解应用自动扩缩在使用计划扩缩时如何处理最大和最小容量非常重要。通过应用自动扩缩,您可以创建计划的操作,指示服务在特定时间执行扩缩操作。

设置计划操作时,您需要定义可扩展目标、扩缩活动的时间,以及最小和最大容量。这些计划操作可以是一个时间的扩缩,或者是定期进行的。在指定的时间,应用自动扩缩会根据新的容量值进行扩缩,通过将当前容量与指定的最小和最大容量进行比较。更多详情请参考 应用自动扩缩。

注意: 您可以在同一资源上同时使用计划扩缩和扩缩政策,以获取两者的好处。

前提条件

阅读本文时您应具备的要求:

您必须安装 AWS 命令行界面 (AWS CLI) 版本 2。指引请参考 AWS CLI 安装和更新指导。您必须拥有一个 Aurora 群集,用以增加将使用应用自动扩缩的复本。应用自动扩缩支持 Amazon Aurora MySQL 兼容版 和 Amazon Aurora PostgreSQL 兼容版 的配置群集。

此外,在进行计划扩缩之前,我们还需要确定以下几点:

Aurora 群集名称扩展时间扩展时的最少读取器数量收缩时间收缩时的最大读取器数量时区默认为 UTC

使用 AWS CLI 部署解决方案

在这一部分,我们将演示如何通过 AWS CLI 根据计划扩缩行动来调整读取器实例的数量。高级步骤如下:

向应用自动扩缩注册目标,即您的 Aurora 群集。创建一个计划行动,将读取器实例的数量扩展至群集中。创建另一个计划行动,在需求时缩减读取器实例的数量。

注册您的 Aurora 群集到应用自动扩缩

以下代码将注册您希望动态扩缩读取器实例的目标 Aurora 群集到应用自动扩缩。

shellaws applicationautoscaling registerscalabletarget servicenamespace rds resourceid clusterltclusternamegt scalabledimension rdsclusterReadReplicaCount mincapacity ltminimum no of readersgt maxcapacity ltmaximum no of readersgt region ltRegion of the Aurora clustergt

以下范例在 useast2 区域注册了一个名为 database1 的 Aurora 群集,最低容量为 0,最高为 5。

shellaws applicationautoscaling registerscalabletarget servicenamespace rds resourceid clusterdatabase1 scalabledimension rdsclusterReadReplicaCount mincapacity 0 maxcapacity 5 region useast2

您可以使用以下 AWS CLI 命令验证目标是否已成功注册:

shellaws applicationautoscaling describescalabletargets servicenamespace rds resourceids clusterltclusternamegt region ltRegion of the Aurora clustergt

例如:aws applicationautoscaling describescalabletargets servicenamespace rds resourceids clusterdatabase1 region useast2

创建计划扩缩行动

在接下来的代码中,我们将创建一个计划扩缩行动,用于在所需时间扩展 Aurora 读取器。

shellaws applicationautoscaling putscheduledaction servicenamespace rds schedule ltcron expressiongt scheduledactionname ltAction namegt resourceid clusterltname of the clustergt scalabledimension rdsclusterReadReplicaCount scalabletargetaction MinCapacity=ltMinimum number of Readersgt MaxCapacity=ltMaximum number of readersgt region ltaws regiongt

以下范例为我们的群集 database1 创建了一个名为 ScaleUpAurora 的计划行动,于每日 UTC 时间 0610 设置最低容量为 6,最高容量为 10:

shellaws applicationautoscaling putscheduledaction servicenamespace rds schedule cron(10 6 ) scheduledactionname ScaleUpAurora resourceid clusterdatabase1 scalabledimension rdsclusterReadReplicaCount scalabletargetaction MinCapacity=6MaxCapacity=10 region useast2

如果您希望提供时区,可使用 timezone 参数;应用自动扩缩默认使用 UTC。时区遵循 JodaTime 格式。例如:

shelltimezone Asia/Kolkata

您可以使用以下命令验证计划行动:

shellaws applicationautoscaling describescheduledactions servicenamespace rds scheduledactionnames ltname of the scheduled actiongt region ltaws regiongt

当计划时间到达时,您将注意到读取器实例的数量增加,如以下截图所示。

飞机加速官网

另外,您可以通过进入 Amazon Aurora 控制台的 Clusters 页面,在 Logs and Events 部分查看这些事件。

创建计划收缩行动

我们使用以下代码创建一个计划收缩行动,用于在所需时间缩减 Aurora 读取器的数量:

shellaws applicationautoscaling putscheduledaction servicenamespace rds schedule ltcron expressiongt scheduledactionname ltAction namegt resourceid clusterltname of the clustergt scalabledimension rdsclusterReadReplicaCount scalabletargetaction MinCapacity=ltMinimum number of ReadersgtMaxCapacity=ltMaximum number of readersgt region ltaws regiongt

以下范例在我们的群集 database1 上创建了一个名为 ScaleDownAurora 的计划行动,于每日 UTC 时间 650 设置最低容量和最高容量均为 0:

shellaws applicationautoscaling putscheduledaction servicenamespace rds schedule cron(50 6 ) scheduledactionname ScaleDownAurora resourceid clusterdatabase1 scalabledimension rdsclusterReadReplicaCount scalabletargetaction MinCapacity=0MaxCapacity=0 region useast2

您可以在 Aurora 控制台上看到收缩事件。以下截图显示操作状态为 In Progress,这意味著应用自动扩缩正在进行群集的收缩。完成后,状态将变更为 Successful。

您还可以使用 AWS CLI 查看所有扩缩事件:

shellaws applicationautoscaling describescalingactivities servicenamespace rds

该指令还有许多其他参数供您使用。更多详情请参考 describescalingactivities。

使用 AWS CloudFormation 部署解决方案

您可以使用 AWS CloudFormation 实现相同的解决方案。请完成以下步骤:

下载 CloudFormation 模板。打开 AWS CloudFormation 控制台并启动堆叠。在 AuroraCluster 中,输入您希望扩展的 Aurora 群集的名称。在 MaximumReaderAtScaleDown 中,指定收缩期间群集中所需的实例数量。在 MaximumReaderAtScaleUp 中,指定扩展期间群集中所需的实例数量。

在 MinimumReaderAtScaleDown 中,指定收缩期间群集中最小实例数量。在 MinimumReaderAtScaleUp 中,指定扩展期间群集中最小实例数量。在 ScaleDownActionName 中,输入唯一的收缩操作标识符。在 ScaleDownTime 中,输入 cron 表达式以确定收缩时间。在 ScaleUpActionName 中,输入唯一的扩展操作标识符。在 ScaleUpTime 中,输入 cron 表达式以确定扩展时间。在 TimeZone 中,指定您希望使用的时区,使用 JodaTime 格式。

提供所有相关详细信息后选择 下一步。在 审核 页面上仔细检查您提供的 Aurora 群集参数值,然后选择 提交。

23 分钟后,您将看到 CloudFormation 模板已成功部署,并且根据所给计划进行扩缩操作。

使用 AWS 应用程序自动缩放为 Amazon Aurora 副本安排缩放 数据库博客

额外考量

使用 AWS CLI 设置 registerscalabletarget 并设置最小和最大数字时,应用自动扩缩不会立即进行扩缩。然而,当使用 AWS CloudFormation 进行相同配置时,只要您指定 ScalableTarget 并提供 MaxCapacity 和 MinCapacity,AWS CloudFormation 将相应调整群集的读取器。因此,我们将其明确设置为 0,但您可以根据需要更改。

以下代码是 CloudFormation 模板的一部分供参考:

jsonScalableTarget { Type AWSApplicationAutoScalingScalableTarget Properties { MaxCapacity 0 MinCapacity 0

应用自动扩缩仅能移除其创建的读取器实例,而对于手动创建的读取器在收缩操作中不会有任何影响。不过,所有手动创建的读取器在扩缩时会计入最小容量。

让我们探讨一个例子。假设我们有一个 Aurora 群集,其中有一个写入器和两个手动创建的读取器实例。如果我们启用自动扩缩并将扩缩操作的 MinCapacity 设置为 3,则应用自动扩缩将考虑这两个手动创建的读取器。因此,它只会向群集中添加一个额外的读取器。

相反,如果我们将相同群集的收缩操作的 MaxCapacity 设置为 0,则应用自动扩缩仅会删除其新增的那一个读取器实例。因此,该群集仍将包含两个原始的手动创建读取器。此时收缩操作状态不会失败,状态将显示为“未满足”。

如果您希望添加三个读取器,必须将 MinCapacity 设置为 5。

请注意,如果您使用 AWS CloudFormation 进行读取器的调整计划,然后删除此模板,则该调整政策也将被删除,这将导致自动扩缩的读取器也被删除。

提示与故障排除

最好避免删除和重新创建有相互依赖的 AWS 组件。以下提示可帮助您进行必要的更改:

当 Aurora 自动扩缩添加新的 Aurora 副本时,新的 Aurora 副本将使用与主实例相同的 DB 实例类型。Aurora 自动扩缩仅在 DB 群集
Windows LDAP 漏洞获得 POC 利用代码 媒体

Windows LDAP 漏洞获得 POC 利用代码 媒体

最新漏洞 LDAPNightmare 导致 Windows Server 崩溃风险重点概述漏洞描述 一个新的概念验证漏洞CVE202449113可能导致易受攻击的 Windows Server 实例和...

在 Amazon RDS for SQL Server 中跨账户备份和恢复透明数据加密数据库 数据库

在 Amazon RDS for SQL Server 中跨账户备份和恢复透明数据加密数据库 数据库

在 Amazon RDS for SQL Server 中跨账户备份与恢复透明数据加密数据库主要要点Amazon RDS for SQL Server 简化了 Microsoft SQL Server...

订阅