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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

ElastiCache 适用于 Redis 集群的 Auto Scaling

先决条件

ElastiCache 适用于 Redis 的 Auto Scaling 仅限于以下内容:

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

  • 运行 Redis 引擎版本 7.0.7 及更高版本的数据分层(已启用集群模式)集群

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

  • 实例类型系列 - R7g、R6g、R6gd、R5、M7g、M6g、M5、C7gn

  • 在全球数据存储、 ElastiCache Outposts 或本地区域中运行的集群不支持 Redis 的 Auto Scaling。

使用 Redis Auto S ElastiCache caling 自动管理容量

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

您可以使用 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 对于 Redis,自动缩放会代表您触发缩放。

  • 副本 –自动向集群添加/删除其中的副本,类似于手动增加/减少副本操作。 ElastiCache for Redis auto scaling 可在集群中的所有分片上统一添加/删除副本。

ElastiCache for Redis 支持以下类型的自动扩展策略:

以下步骤总结了 Redis ElastiCache 的自动缩放流程,如上图所示:

  1. 您可以 ElastiCache 为适用于 Redis 的复制组创建适用于 Redis ElastiCache 的自动扩展策略。

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

  3. 如果配置的指标值在特定时间段内超过您的目标利用率(或低于目标),则 CloudWatch 会触发警报,调用 Redis ElastiCache auto Scaling 来评估您的扩展策略。

  4. ElastiCache for Redis auto scaling 会发出修改请求以调整您的集群容量。

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

要了解 Redi ElastiCache s Auto Scaling 的工作原理,假设你有一个名为UsersCluster的集群。通过监控的 CloudWatch 指标UsersCluster,您可以确定流量达到峰值时集群所需的最大分片数以及流量处于最低点时所需的最小分片。此外,还针对 UsersCluster 集群确定 CPU 利用率目标值。 ElastiCache for Redis auto scaling 使用其目标跟踪算法来确保根据需要调整的UsersCluster预配置分片,以便利用率保持在或接近目标值。

注意

扩展可能需要很长时间,并且需要额外的群集资源才能使分片重新平衡。 ElastiCache for Redis Auto Scaling 只有在实际工作负载持续几分钟内保持升高(或低迷)状态时才会修改资源设置。f ElastiCache or Redis auto scaling 目标跟踪算法旨在长期将目标利用率保持在或接近您选择的值。

Redis Auto Scal ElastiCache ing 所需的 IAM 权限

ElastiCache for Redis 的 Auto Scaling 是通过 for Redis、 CloudWatch和 Appl ElastiCache ication Auto Scaling API 的组合实现的。使用适用 ElastiCache 于 Redis 创建和更新集群,使用创建警报 CloudWatch,使用Application Auto Scaling创建扩展策略。除了用于创建和更新集群的标准 IAM 权限外,访问 ElastiCache Redis Auto Scaling 设置的 IAM 用户还必须拥有支持动态扩展的服务的相应权限。IAM 用户必须具有使用以下示例策略中的操作的权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "application-autoscaling:*", "elasticache:DescribeReplicationGroups", "elasticache:ModifyReplicationGroupShardConfiguration", "elasticache:IncreaseReplicaCount", "elasticache:DecreaseReplicaCount", "elasticache:DescribeCacheClusters", "elasticache:DescribeCacheParameters", "cloudwatch:DeleteAlarms", "cloudwatch:DescribeAlarmHistory", "cloudwatch:DescribeAlarms", "cloudwatch:DescribeAlarmsForMetric", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics", "cloudwatch:PutMetricAlarm", "cloudwatch:DisableAlarmActions", "cloudwatch:EnableAlarmActions", "iam:CreateServiceLinkedRole", "sns:CreateTopic", "sns:Subscribe", "sns:Get*", "sns:List*" ], "Resource": "arn:aws:iam::123456789012:role/autoscaling-roles-for-cluster" } ] }

服务相关角色

fo ElastiCache r Redis auto Scaling 服务还需要描述您的集群和 CloudWatch 警报的权限,以及代表您修改您 ElastiCache 的 Redis 目标容量的权限。如果您为适用于 Redis 的集群启用 Auto Scaling,它会创建一个名为的服务相关角色。 ElastiCache AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG此服务相关角色授予 ElastiCache Redis auto Scaling 描述策略警报、监控队列当前容量和修改队列容量的权限。服务相关角色是 Redis auto Scal ElastiCache ing 的默认角色。有关更多信息,请参阅《Application Auto Scaling 用户指南》中的 Redis 自动缩放的服务相关角色。 ElastiCache

Auto Scaling 最佳实践

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

  1. 仅使用一个跟踪指标 – 确定您的集群是具有 CPU 密集型工作负载还是数据密集型工作负载,并使用相应的预定义指标来定义扩展策略。

    • 引擎 CPU:ElastiCachePrimaryEngineCPUUtilization(分片维度)或 ElastiCacheReplicaEngineCPUUtilization(副本维度)

    • 数据库使用情况:ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage 此扩展策略在集群上将 maxmemory-policy 设置为 noeviction 时效果最佳。

    我们建议您避免在集群上使用每个维度使用多个策略。 ElastiCache for Redis 如果任何目标跟踪策略已准备好进行横向扩展,Auto Scaling 将扩展可扩展的目标,但只有在所有目标跟踪策略(启用了缩小部分)都准备好进行扩展时,才会缩小规模。如果多个策略指示可扩展目标同时横向扩展或缩减,ElastiCache for Redis 会根据为横向缩减和横向扩展提供最大容量的策略进行扩展。

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

    对于数据分层集群(r6gd 系列实例类型),请避免使用基于内存的指标进行扩缩。

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

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

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

  6. 定义目标值-您可以分析四周内集群利用率的相应 CloudWatch 指标,以确定目标值阈值。如果您仍然不确定要选择哪个值,我们建议您从支持的最小预定义指标值开始。

  7. AutoScaling on Target Tracking 最适合在分片/副本维度上均匀分配工作负载的集群。分布不均可能导致:

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

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

注意

扩展集群时, ElastiCache 会自动将其中一个现有节点(随机选择)中加载的函数复制到新节点。如果您的集群有 Redis 7.0 或更高版本,并且您的应用程序使用 Redis Functions,我们建议您在横向扩展之前将所有函数加载到所有分片,这样您的集群就不会在不同的分片上有不同的函数。

注册后 AutoScaling,请注意以下几点:

  • Auto Scaling 支持的配置存在限制,因此我们建议不要更改已注册 Auto Scaling 的复制组的配置。示例如下:

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

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

    • 更改 ReservedMemoryPercent 参数。

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