目标跟踪扩展策略
在使用目标跟踪扩展策略时,您可以选择一个指标并设置一个目标值。ElastiCache for Redis 弹性伸缩创建和管理触发扩展策略的 CloudWatch 告警,并根据指标和目标值计算扩展调整。扩展策略根据需要添加或删除分区,以便将指标保持在指定的目标值或接近该值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节,并最大限度减少队列容量发生快速波动的情况。
例如,考虑使用具有已配置了目标值的预定义平均 ElastiCachePrimaryEngineCPUUtilization
指标的扩展策略。这种策略可以将 CPU 使用率保持在指定的目标值或接近该值。
分区的 Auto Scaling 条件
Auto Scaling 策略为您的集群定义以下预定义指标:
ElastiCachePrimaryEngineCPUUtilization
:ElastiCache for Redis 集群中所有主节点在 CloudWatch 中EngineCPUUtilization
指标的平均值。您可以在 CloudWatch 中在 ElastiCache for RedisReplicationGroupId, Role
下找到聚合指标值,获得所需的 ReplicationGroupId 和角色主节点。ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage
:ElastiCache for Redis 集群中所有节点在 CloudWatch 中DatabaseMemoryUsageCountedForEvictPercentage
指标的平均值。您可以在 CloudWatch 中在 ElastiCache for Redis(Redis 复制组指标)下找到复制组的聚合指标值。
当服务检测到 ElastiCachePrimaryEngineCPUUtilization
指标等于或大于目标设置时,其会自动提高分区容量。ElastiCache for Redis 按等于两个数字之间较大者的计数来横向扩展集群分区:与目标之间差异的百分比和当前分区数的 20%。对于横向缩减,ElastiCache for Redis 不会弹性横向缩减,除非整体指标值低于所定义的目标的 75%。
关于横向扩展示例,如果您的分区数为 50,以及
在目标超出了 30% 的情况下,ElastiCache for Redis 将横向扩展 30%,最后的结果是每个集群 65 个分区。
在目标超出了 10% 的情况下,ElastiCache for Redis 默认横向扩展最低 20%,最后的结果是每个集群 60 个分区。
对横向缩减示例,如果您选择的目标值是 60%,则 ElastiCache for Redis 会直到该指标小于或等于 45%(比目标 60% 低 25%)时才会弹性横向缩减。
Auto Scaling 注意事项
请注意以下事项:
目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。ElastiCache for Redis 在与集群现有分区目标数之间存在最小 20% 的偏差时横向扩展分区。
当指定指标数据不足时,目标跟踪扩展策略不会执行扩展。它不会执行向内扩展,因为它不会将数据不足解读为使用率低。
您可能会看到目标值与实际指标数据点之间存在差距。这是因为 ElastiCache for Redis 弹性伸缩在确定要添加或删除多少容量时将始终通过向上或向下舍入保守地进行操作。以免添加的容量不足或删除的容量过多。
为了确保应用程序可用性,服务会针对指标尽快按比例横向扩展,但横向缩减过程相对缓慢。
您可以为 ElastiCache for Redis 集群提供多个目标跟踪扩缩策略,前提是它们各自使用不同的指标。ElastiCache for Redis 弹性伸缩的目的是始终优先考虑可用性,因此其行为会有所不同,具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行扩展,它将扩展服务,但仅在所有目标跟踪策略(启用了缩减部分)准备好缩减时才执行缩减。
请勿编辑或删除 ElastiCache for Redis 弹性伸缩为目标跟踪扩缩策略管理的 CloudWatch 告警。在您删除扩展策略时,ElastiCache for Redis 弹性伸缩会自动删除相应的告警。
ElastiCache for Redis 弹性伸缩不会阻止您手动修改集群分区。这些手动调整不会影响附加到扩展策略的任何现有 CloudWatch 告警,但可能会影响可触发这些 CloudWatch 告警的指标。
这些由 Auto Scaling 管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此,拥有热分区可能会导致以下任一情况:
因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展
因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。
ElastiCache for Redis 对每个集群的节点的默认限制仍然适用。因此,当选择 Auto Scaling 时,如果您希望最大节点数超过默认限制,请在 Amazon Service Limits 请求提高限制,并选择限制类型 Nodes per cluster per instance type(每个实例类型的集群的节点数)。
请确保您的 VPC 中有足够的 ENI(弹性网络接口)可用,横向扩展过程中需要弹性网络接口。有关更多信息,请参阅弹性网络接口。
如果 EC2 没有足够的可用容量,则 ElastiCache for Redis 弹性伸缩将不会横向扩展,并延迟直到容量可用。
在横向缩减期间,ElastiCache for Redis 弹性伸缩不会删除具有项目大小大于 256MB 后序列化的槽的分区。
在横向缩减期间,如果生成的分区配置中可用的内存不足,则横向缩减不会删除分区。