

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

# 目标跟踪扩缩策略
<a name="AutoScaling-Scaling-Policies-Target"></a>

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

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

## 预定义指标
<a name="AutoScaling-Scaling-Criteria-predfined-metrics"></a>

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


****  

| 预定义指标名称 | CloudWatch 指标名称 | CloudWatch 指标维度 | 不符合条件的实例类型  | 
| --- | --- | --- | --- | 
| ElastiCachePrimaryEngineCPUUtilization |  `EngineCPUUtilization`  |  ReplicationGroupId，角色 = 主要  | 无 | 
| ElastiCacheDatabaseCapacityUsageCountedForEvictPercentage |  `DatabaseCapacityUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | 无 | 
| ElastiCacheDatabaseMemoryUsageCountedForEvictPercentage |  `DatabaseMemoryUsageCountedForEvictPercentage`  |  Valkey 或 Redis OSS 复制组指标  | R6gd | 

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

## 分区的弹性伸缩条件
<a name="AutoScaling-Scaling-Criteria"></a>

当服务检测到您的预定义指标等于或大于目标设置时，它会自动提高分片容量。ElastiCache for Valkey and Redis OSS 会按以下两个数字中的较大者来横向扩展集群分片：与目标之间差异的百分比和当前分片数的 20%。对于横向缩减，ElastiCache 不会自动横向缩减，除非整体指标值低于所定义的目标的 75%。

关于横向扩展示例，如果您的分区数为 50，以及
+ 在目标超出了 30% 的情况下，ElastiCache 将横向扩展 30%，最后的结果是每个集群 65 个分片。
+ 在目标超出了 10% 的情况下，ElastiCache 默认横向扩展最低 20%，最后的结果是每个集群 60 个分片。

对横向缩减示例，如果您选择的目标值是 60%，则 ElastiCache 会直到该指标小于或等于 45%（比目标 60% 低 25%）时才会自动横向缩减。

## 弹性伸缩注意事项
<a name="AutoScaling-Scaling-Considerations"></a>

请注意以下事项：
+ 目标跟踪扩展策略假设它应该在指定指标高于目标值时执行向外扩展。因此，不能使用目标跟踪扩展策略在指定指标低于目标值时向外扩展。ElastiCache for Valkey and Redis OSS 会在与集群现有分片目标数之间存在最小 20% 的偏差时横向扩展分片。
+ 当指定指标数据不足时，目标跟踪扩展策略不会执行扩展。它不会执行横向缩减，因为它不会将数据不足解读为使用率低。
+ 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 ElastiCache 自动扩缩在确定要添加或移除多少容量时将始终通过向上或向下舍入保守地进行操作，以免添加的容量不足或删除的容量过多。
+ 为了确保应用程序可用性，服务会针对指标尽快按比例横向扩展，但横向缩减过程相对缓慢。
+ 您可以为 ElastiCache for Valkey and Redis OSS 集群提供多个目标跟踪扩缩策略，前提是每个策略使用不同的指标。ElastiCache 自动扩缩的目的是始终优先考虑可用性，因此其行为会有所不同，具体取决于目标跟踪策略是否已准备好横向扩展或横向缩减。如果任何目标跟踪策略已准备好进行扩展，它将扩展服务，但仅在所有目标跟踪策略（启用了缩减部分）准备好缩减时才执行缩减。
+ 请勿编辑或删除 ElastiCache 自动扩缩为目标跟踪扩缩策略管理的 CloudWatch 警报。在您删除扩缩策略时，ElastiCache 自动扩缩会自动删除警报。
+ ElastiCache 自动扩缩不会阻止您手动修改集群分片。这些手动调整不会影响附加到扩展策略的任何现有 CloudWatch 告警，但可能会影响可触发这些 CloudWatch 告警的指标。
+ 这些由弹性伸缩管理的 CloudWatch 告警是通过集群中所有分区的 AVG 指标来定义的。因此，拥有热分区可能会导致以下任一情况：
  + 因若干热分区上负载触发 CloudWatch 告警而导致在不需要扩展时执行扩展
  + 因所有分区的影响告警的聚合 AVG 指标不违例而在需要扩展时不执行扩展。
+ ElastiCache 对每个集群的节点的默认限制仍然适用。因此，当选择弹性伸缩时，如果您希望最大节点数超过默认限制，请在 [AWS Service Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) 请求提高限制，并选择限制类型 **Nodes per cluster per instance type**（每个实例类型的集群的节点数）。
+ 请确保您的 VPC 中有足够的 ENI（弹性网络接口）可用，横向扩展过程中需要弹性网络接口。有关更多信息，请参阅[弹性网络接口](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_ElasticNetworkInterfaces.html)。
+ 如果 EC2 没有足够的可用容量，则 ElastiCache 自动扩缩将不会扩展，并将延迟到容量可用为止。
+ 在横向缩减期间，ElastiCache for Redis OSS 自动扩缩不会移除以下分片：插槽在序列化后的项目大小大于 256 MB。
+ 在横向缩减期间，如果生成的分区配置中可用的内存不足，则横向缩减不会删除分区。