自动扩缩 Valkey 和 Redis OSS 集群
先决条件
ElastiCache 自动扩缩具有以下限制:
-
运行 Valkey 7.2 和更高版本或运行 Redis OSS 6.0 和更高版本的 Valkey 或 Redis OSS(已启用集群模式)集群
-
运行 Valkey 7.2 和更高版本或运行 Redis OSS 7.0.7 和更高版本的数据分层(已启用集群模式)集群
-
实例大小 – 大型、XLarge、2XLarge
-
实例类型系列 - R7g、R6g、R6gd、R5、M7g、M6g、M5、C7gn
-
ElastiCache 中的自动扩缩不支持在全局数据存储、Outposts 或 Local Zones 中运行的集群。
使用 ElastiCache(兼容 Valkey 或 Redis OSS)自动扩缩自动管理容量
ElastiCache(兼容 Valkey 或 Redis OSS)自动扩缩能够自动增加或减少 ElastiCache 服务中所需的分片或副本。ElastiCache 利用 Application Auto Scaling 服务来提供此功能。有关更多信息,请参阅 Application Auto Scaling。要使用自动扩缩,您需要定义并应用利用您分配的 CloudWatch 指标和目标值的扩缩策略。ElastiCache 自动扩缩使用该策略来增加或减少实例数,以响应实际工作负载。
您可以使用 AWS 管理控制台根据预定义的指标应用扩展策略。枚举中对 predefined metric 进行了定义,因此您可在代码中按名称指定或在 AWS 管理控制台 中使用它。自定义指标不可用于使用 AWS 管理控制台的选择。或者,您也可以使用 AWS CLI 或 Application Auto Scaling API 根据预定义或自定义指标应用扩缩策略。
ElastiCache for Valkey and Redis OSS 支持在以下维度进行扩缩:
-
分片 – 自动添加/删除集群中的分片,类似于手动在线重新分片。在此情况下,ElastiCache 自动扩缩会代表您触发扩缩。
-
副本 –自动向集群添加/删除其中的副本,类似于手动增加/减少副本操作。ElastiCache for Valkey and Redis OSS 自动扩缩可以在集群的所有分片中均匀地添加/移除副本。
ElastiCache for Valkey and Redis OSS 支持以下类型的自动扩缩策略:
-
目标跟踪扩缩策略 – 根据特定指标的目标值,增加或减少服务所运行的分片/副本数量。这与恒温器保持家里温度的方式类似。您选择一个温度,恒温器将完成所有其他工作。
-
适用于您的应用程序的计划扩缩。– ElastiCache for Valkey and Redis OSS 自动扩缩可以根据日期和时间增加或减少服务所运行的分片/副本数量。
以下步骤总结了上图所示的 ElastiCache for Valkey and Redis OSS 自动扩缩过程:
-
您为复制组创建 ElastiCache 自动扩缩策略。
-
ElastiCache 自动扩缩代表您创建一对 CloudWatch 警报。每对告警代表指标的上限和下限。当集群的实际使用率在一段持续时间内偏离目标使用率时,就会触发这些 CloudWatch 告警。您现在可以在控制台中查看告警。
-
如果配置的指标值在特定时长内超出目标使用率(或低于目标使用率),CloudWatch 会触发告警,调用自动扩缩以评估扩缩策略。
-
ElastiCache 自动扩缩发出修改请求来调整您的集群容量。
-
ElastiCache 处理修改请求,并动态增加(或减少)集群分片/副本容量,使其接近目标使用率。
为了解 ElastiCache 自动扩缩的工作方式,假定您有一个名为 UsersCluster 的集群。通过监控 UsersCluster 的 CloudWatch 指标,您可以确定集群在流量处于峰值时所需的最大分片数,以及当流量处于最低点时所需的最小分片数。此外,还针对 UsersCluster 集群确定 CPU 利用率目标值。ElastiCache 自动扩缩使用其目标跟踪算法来确保 UsersCluster 的预置分片将根据需要得到调整,以使利用率保持在或接近目标值。
注意
扩展可能需要相当长的时间,并需要额外的集群资源才能重新平衡分片。仅当实际工作负载在几分钟的持续时段内保持提高(或降低)时,ElastiCache 自动扩缩才会修改资源设置。自动扩缩目标跟踪算法旨在使目标使用率长期达到或接近选定值。
自动扩缩需要的 IAM 权限
ElastiCache for Valkey and Redis OSS 自动扩缩需要通过将 ElastiCache、CloudWatch 和 Application Auto Scaling API 结合使用来实现。ElastiCache 负责创建和更新集群,CloudWatch 负责创建警报,而 Application Auto Scaling 负责创建扩缩策略。除创建和更新集群所需的标准 IAM 权限外,访问 ElastiCache 自动扩缩设置的 IAM 用户还必须具有支持动态扩缩的服务的相应权限。在这个最新的策略中,我们通过 elasticache:ModifyCacheCluster 操作增加了对 Memcached 垂直扩缩的支持。IAM 用户必须具有使用以下示例策略中的操作的权限。
服务相关角色
ElastiCache for Valkey and Redis OSS 自动扩缩服务还需要描述集群和 CloudWatch 警报的权限,以及代表您修改 ElastiCache 目标容量的权限。如果您为集群启用自动扩缩服务,系统就会创建一个名为 AWSServiceRoleForApplicationAutoScaling_ElastiCacheRG 的服务相关角色。此服务相关角色授予 ElastiCache 自动扩缩所需的权限,以描述策略警报、监控实例集的当前容量以及修改实例集的容量。此服务相关角色是 ElastiCache 自动扩缩的默认角色。有关更多信息,请参阅《Application Auto Scaling 用户指南》中的 ElastiCache for Redis OSS 自动扩缩的服务相关角色。
Auto Scaling 最佳实践
在注册 Auto Scaling 功能之前,我们建议执行以下操作:
-
仅使用一个跟踪指标 – 确定您的集群是具有 CPU 密集型工作负载还是数据密集型工作负载,并使用相应的预定义指标来定义扩展策略。
-
引擎 CPU:
ElastiCachePrimaryEngineCPUUtilization(分片维度)或ElastiCacheReplicaEngineCPUUtilization(副本维度) -
数据库使用情况:
ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage此扩展策略在集群上将 maxmemory-policy 设置为 noeviction 时效果最佳。
我们建议您在集群上避免每个维度使用多个策略。如果任何目标跟踪策略已准备好进行横向扩展,ElastiCache for Valkey and Redis OSS 自动扩缩将横向扩展可扩展目标,但仅在所有目标跟踪策略(启用了横向缩减部分)准备好横向缩减时才执行此操作。如果多个策略指示可扩展目标同时横向扩展或缩减,ElastiCache for Redis 会根据为横向缩减和横向扩展提供最大容量的策略进行扩展。
-
-
目标跟踪的自定义指标 – 在对目标跟踪使用自定义指标时要谨慎,因为自动扩缩最适合与为策略所选的指标变化成比例的横向扩展/缩减。如果这些指标未随用于策略创建的扩缩操作成比例变化,则可能会导致持续的横向扩展或横向缩减操作,从而可能会影响可用性或成本。
对于数据分层集群(r6gd 系列实例类型),请避免使用基于内存的指标进行扩缩。
-
计划扩缩 – 如果您确定工作负载是确定性的(在特定时间达到高/低),我们建议您使用计划扩缩并根据需要配置目标容量。目标跟踪最适合以通过在您需要更多资源时横向扩展,并在需要较少资源时横向缩减的方式按所需目标指标运行的非确定性工作负载和集群。
-
禁用横向缩减 – 基于目标跟踪的 Auto Scaling 最适合工作负载逐渐增加/减少的集群,因为指标的峰值/下降可触发连续横向扩展/缩减振荡。为了避免这种振荡,您可以先禁用横向缩减,之后可以随时根据需要手动横向缩减。
-
测试应用程序 – 我们建议您使用估计的最小/最大工作负载测试应用程序,以确定集群所需的绝对最小、最大分片/副本,同时创建扩缩策略以避免出现可用性问题。Auto Scaling 可以横向扩展至为目标配置的最大阈值,也可以横向缩减至配置的最小阈值。
-
定义目标值 – 您可以分析四周内集群利用率的相应 CloudWatch 指标,以确定目标值阈值。如果您仍然不确定要选择哪个值,我们建议您从支持的最小预定义指标值开始。
-
基于目标跟踪的自动扩缩最适合工作负载在分片/副本维度之间均匀分布的集群。分布不均可能导致:
-
因几个热分片/副本上工作负载峰值/下降而出现在不需要扩展时进行扩展。
-
因整体平均值接近目标(即使具有热分片/副本)而在需要扩展时不执行扩展。
-
注意
横向扩展集群时,ElastiCache 会自动将其中一个现有节点(随机选择)中加载的函数复制到新节点。如果您的集群有 Valkey 或 Redis OSS 7.0 或更高版本,并且您的应用程序使用 Functions
注册到自动扩缩功能后,请注意以下事项:
-
Auto Scaling 支持的配置存在限制,因此我们建议不要更改已注册 Auto Scaling 的复制组的配置。示例如下:
-
手动将实例类型修改为不支持的类型。
-
将复制组与全局数据存储关联。
-
更改
ReservedMemoryPercent参数。 -
手动增加/减少分片/副本,使其数目超出策略创建过程中配置的最小/最大容量。
-