目标跟踪扩缩策略 - ElastiCache 适用于 Redis 的 Amazon
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

目标跟踪扩缩策略

在使用目标跟踪扩展策略时,您可以选择一个指标并设置一个目标值。ElastiCache for Redis 弹性伸缩创建和管理触发扩缩策略的 CloudWatch 告警,并根据指标和目标值计算扩展调整。扩展策略根据需要添加或删除分区,以便将指标保持在指定的目标值或接近该值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会根据由于负载模式波动而造成的指标波动进行调节,并最大限度减少队列容量发生快速波动的情况。

例如,考虑使用具有已配置了目标值的预定义平均 ElastiCachePrimaryEngineCPUUtilization 指标的扩展策略。这种策略可以将 CPU 使用率保持在指定的目标值或接近该值。

预定义指标

预定义指标是一种结构,用于指示给定 CloudWatch 指标的特定名称、维度和统计数据(average)。自动扩缩策略为您的集群定义下面的预定义指标之一:

预定义指标名称 CloudWatch 指标名称 CloudWatch 指标维度 不符合条件的实例类型
ElastiCachePrimaryEngineCPUUtilization

EngineCPUUtilization

ReplicationGroupId,角色 = 主要

ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage

DatabaseCapacityUsageCountedForEvictPercentage

Redis 复制组指标

ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage

DatabaseMemoryUsageCountedForEvictPercentage

Redis 复制组指标

R6gd

数据分层实例类型不能使用 ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage,因为这些实例类型将数据同时存储在内存和 SSD 中。数据分层实例的预期使用案例是 100% 的内存使用率,并根据需要填满 SSD。

分区的弹性伸缩条件

当服务检测到您的预定义指标等于或大于目标设置时,它会自动提高分片容量。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%)时才会弹性横向缩减。

弹性伸缩注意事项

请注意以下事项:

  • 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。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 告警的指标。

  • 这些由弹性伸缩管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此,拥有热分区可能会导致以下任一情况:

    • 因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展

    • 因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。

  • ElastiCache for Redis 对每个集群的节点的默认限制仍然适用。因此,当选择弹性伸缩时,如果您希望最大节点数超过默认限制,请在 Amazon Service Limits 请求提高限制,并选择限制类型 Nodes per cluster per instance type(每个实例类型的集群的节点数)。

  • 请确保您的 VPC 中有足够的 ENI(弹性网络接口)可用,横向扩展过程中需要弹性网络接口。有关更多信息,请参阅弹性网络接口

  • 如果 EC2 没有足够的可用容量,则 ElastiCache for Redis 弹性伸缩将不会扩展,并延迟直到容量可用。

  • 在横向缩减期间,ElastiCache for Redis 弹性伸缩不会删除具有项目大小大于 256MB 后序列化的槽的分区。

  • 在横向缩减期间,如果生成的分区配置中可用的内存不足,则横向缩减不会删除分区。