弹性伸缩 ElastiCache for Redis 集群 - Amazon ElastiCache for Redis
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

弹性伸缩 ElastiCache for Redis 集群

Prerequisites

ElastiCache for Redis 弹性伸缩仅限于以下:

  • 运行 Redis 引擎版本 6.x 以上的 Redis(已启用集群模式)集群

  • 实例类型系列 – R5、R6g、M5、M6g

  • 实例大小 – 大型、XLarge、2XLarge

  • ElastiCache for Redis 中的 Auto Scaling 不支持在全局数据存储、Outposts 或 Local Zones 中运行的集群。

  • 适用于 ElastiCache for Redis 的 Amazon Auto Scaling 在以下区域不可用:中国(北京)、中国(宁夏)、中国(宁夏)、Amazon GovCloud (US-West) 和 Amazon GovCloud (US-East)。

使用 ElastiCache for Redis 弹性伸缩自动管理容量

ElastiCache for Redis 弹性伸缩能够自动增加或减少 ElastiCache for Redis 服务中所需的分区或副本。ElastiCache for Redis 利用 Application Auto Scaling 服务来提供此功能。有关更多信息,请参阅 Application Auto Scaling。要使用弹性伸缩,您需要定义并应用利用您分配的 CloudWatch 指标和目标值的扩展策略。ElastiCache for Redis 弹性伸缩使用该策略增加或减少实例数以响应实际工作负载。

您可以使用 Amazon Web Services Management Console根据预定义的指标应用扩展策略。枚举中对 predefined metric 进行了定义,因此您可在代码中按名称指定或在 Amazon Web Services Management Console 中使用它。自定义指标不可用于使用 Amazon Web Services Management Console的选择。或者,您也可以使用 Amazon CLI 或 Application Auto Scaling API 根据预定义或自定义指标应用扩展策略。

ElastiCache for Redis 支持在以下维度进行扩展:

  • 分区 – 自动添加/删除集群中的分区,类似于手动在线重新分区。在此情况下,ElastiCache for Redis 弹性伸缩会代表您触发扩展。

  • 副本 –自动向集群添加/删除其中的副本,类似于手动增加/减少副本操作。ElastiCache for Redis 弹性伸缩可以在集群的所有分区中均匀地添加/删除副本。

ElastiCache for Redis 支持以下类型的弹性伸缩策略:

以下步骤总结了上图所示的 ElastiCache for Redis 弹性伸缩过程:

  1. 您为 ElastiCache for Redis 复制组创建 ElastiCache for Redis 弹性伸缩策略。

  2. ElastiCache for Redis 弹性伸缩代表您创建一对 CloudWatch 告警。每对告警代表指标的上限和下限。当集群的实际使用率在一段持续时间内偏离目标使用率时,就会触发这些 CloudWatch 告警。您现在可以在控制台中查看告警。

  3. 如果配置的指标值在特定时段内超出目标使用率(或低于目标使用率),则 CloudWatch 会触发告警,调用 ElastiCache for Redis 弹性伸缩以评估扩展策略。

  4. ElastiCache for Redis 弹性伸缩发出修改请求来调整您的集群容量。

  5. ElastiCache for Redis 处理修改请求,并动态增加(或减少)集群分区/副本容量,使其接近目标使用率。

为了解 ElastiCache for Redis 弹性伸缩的工作方式,假定您有一个名为 UsersCluster 的集群。通过监控 UsersCluster 的 CloudWatch 指标,您可以确定集群在流量处于峰值时所需的最大分区数,以及当流量处于最低点时所需的最小分区数。此外,还针对 UsersCluster 集群确定 CPU 利用率目标值。ElastiCache for Redis 弹性伸缩使用其目标跟踪算法来确保 UsersCluster 的预置分区将根据需要得到调整,以使利用率保持在或接近目标值。

注意

扩展可能需要相当长的时间,并需要额外的集群资源才能重新平衡分区。仅当实际工作负载在几分钟的持续时段内保持提高(或降低)时,ElastiCache for Redis 弹性伸缩才会修改资源设置。ElastiCache for Redis 弹性伸缩目标跟踪算法寻求使目标使用率长期达到或接近选定值。

服务相关角色

ElastiCache for Redis 弹性伸缩服务还需要描述集群和 CloudWatch 告警的权限,以及代表您修改 ElastiCache for Redis 目标容量的权限。如果您为 ElastiCache for Redis 集群启用弹性伸缩功能,它将创建一个名为 AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG 的服务相关角色。此服务相关角色授予 ElastiCache for Redis 弹性伸缩权限,以描述策略告警、监控机群的当前容量以及修改机群的容量。此服务相关角色是 ElastiCache for Redis 弹性伸缩的默认角色。有关更多信息,请参阅 Application Auto Scaling 用户指南中的 ElastiCache for Redis 弹性伸缩服务相关角色

Auto Scaling 最佳实践

在注册 Auto Scaling 之前,我们建议执行以下操作:

  1. 仅使用一个跟踪指标 – 确定您的集群是否具有 CPU 密集型工作负载或内存密集型工作负载,并使用相应的预定义指标来定义扩展策略。由于在任何目标跟踪策略已准备好横向扩展的情况下,ElastiCache for Redis 弹性伸缩会横向扩展可扩展的目标,但仅在所有目标跟踪策略(启用了横向缩减部分)准备好横向缩减时才执行横向缩减,因此我们建议避免集群上每个维度有多个策略。如果多个策略指示可扩展目标同时横向扩展或缩减,ElastiCache for Redis 会根据为横向缩减和横向扩展提供最大容量的策略进行扩展。

  2. 仅使用一个维度 – 确定您的集群是写入还是读取繁重的工作负载,并使用相应的维度(分区/副本)定义扩展策略。在同一集群的多个维度上具有策略可能会导致对扩展操作产生不利影响。例如,在您针对分区和副本在引擎 CPU 上创建扩展政策的情况下,如果横向扩展操作(连同副本一起添加新分区)在分区维度上触发,则新副本的增加会影响副本维度的扩展策略,从而触发横向缩减副本,反之亦然。Avg 指标在所有集群节点中用于预定义的指标。

  3. 目标跟踪的自定义指标 – 在对目标跟踪使用自定义指标时要谨慎,因为 Auto Scaling 最适合与为策略所选的指标变化成比例的横向扩展/缩减。如果将未与扩展操作成比例变化的此类指标用于策略创建,则可能会导致持续的横向扩展或横向缩减操作,从而可能会影响可用性或成本。

  4. 计划扩展 – 如果您确定工作负载是确定性的(在特定时间达到高/低),我们建议您使用计划扩展并根据需要配置目标容量。目标跟踪最适合以通过在您需要更多资源时横向扩展,并在需要较少资源时横向缩减的方式按所需目标指标运行的非确定性工作负载和集群。

  5. 禁用横向缩减 – 目标跟踪上的弹性伸缩最适合工作负载逐渐增加/减少的集群,因为指标的峰值/下降可触发连续横向扩展/缩减振荡。为了避免这种振荡,您可以先禁用横向缩减,之后可以随时根据需要手动横向缩减。

  6. 测试应用程序 – 我们建议您使用估计的最小、最大工作负载测试应用程序,以确定集群所需的绝对最小、最大分区/副本,同时创建扩展策略以避免可用性问题。弹性伸缩可以横向扩展至最大值,并将横向缩减到为目标配置的最小阈值。

  7. 定义目标值 – 您可以分析四周内集群利用率的相应 CloudWatch 指标,以确定目标值阈值。如果仍然不确定要选择哪个值,我们建议先选择支持的最小预定义指标值,以便针对可用性而倾向于进行横向扩展。

  8. 目标跟踪上的弹性伸缩最适合工作负载在分区/副本维度之间均匀分布的集群。分布不均可能导致:

    • 因几个热分区/副本上工作负载峰值/下降而出现在不需要扩展时进行扩展。

    • 因整体平均值接近目标(即使具有热分区/副本)而在需要扩展时不执行扩展。

注册到 Auto Scaling 后,请注意以下事项:

  • Auto Scaling 支持的配置存在限制,因此我们建议不要更改已注册 Auto Scaling 复制组的配置。以下是几种情况,但其不受限:

    • 手动将实例类型修改为不支持的类型。

    • 将复制组与全局数据存储关联。

    • 更改 ReserverMemoryPercent 参数。

    • 手动增加/减少分区/副本,使它们的数目超出策略创建过程中配置的最小、最大容量。