Amazon EC2 Auto Scaling
用户指南

适用于 Amazon EC2 Auto Scaling 的目标跟踪扩展策略

在使用目标跟踪扩展策略时,可以选择一个扩展指标并设置一个目标值。Amazon EC2 Auto Scaling 创建和管理触发扩展策略的 CloudWatch 警报,并根据指标和目标值计算扩展调整。扩展策略根据需要增加或减少容量,将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还会对由于负载模式变化而造成的指标变化进行调整。

例如,您可以使用目标跟踪扩展进行以下操作:

  • 配置目标跟踪扩展策略,使 Auto Scaling 组的平均聚合 CPU 利用率保持在 40%。

  • 为 Auto Scaling 组配置目标跟踪扩展策略,使 Elastic Load Balancing 目标组的每目标请求数保持在 1000。

建议将随 Amazon EC2 实例指标扩展的频率设置为 1 分钟,这可更快地响应使用率变化。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应速度变慢,并根据过期的指标数据进行扩展。默认情况下,Amazon EC2 实例是针对基本监控启用的,也就是说,实例的指标数据以 5 分钟的间隔提供。您可以启用详细监控,从而以 1 分钟的频率获取实例的指标数据。有关更多信息,请参阅 为 Auto Scaling 实例配置监控

注意事项

请注意以下事项:

  • 目标跟踪扩展策略假设它应该在指定指标高于目标值时扩展 Auto Scaling 组。因此,不能使用目标跟踪扩展策略在指定指标低于目标值时扩展 Auto Scaling 组。

  • 您可能会看到目标值与实际指标数据点之间存在差距。这是因为我们在确定需要添加或删除多少个实例时通过向上或向下取整来保守地进行操作,以免添加的实例数量不足或删除的实例数量过多。但是,对于实例较少的 Auto Scaling 组,组的使用率可能偏离目标值较远。例如,您将 CPU 使用率的目标值设置为 50%,然后 Auto Scaling 组超过了该目标。我们可以确定,添加 1.5 个实例会将 CPU 使用率降低到接近 50%。由于不可能添加 1.5 个实例,我们将该值向上取整,添加两个实例。这可能会将 CPU 使用率降至 50% 以下,但可确保应用程序具有充足的支持资源。同样,如果我们确定删除 1.5 个实例可使 CPU 使用率提高到 50% 以上,我们将只删除一个实例。

  • 对于包含更多实例的更大 Auto Scaling 组,使用率分布在更多实例上,在这种情况下,添加或删除实例会导致目标值与实际指标数据点之间的差距缩小。

  • 为了确保应用程序可用性,Auto Scaling 组会针对指标尽快按比例向外扩展,但会逐渐向内扩展。

  • 一个 Auto Scaling 组可以同时实施多个扩展策略。有关更多信息,请参阅 多个扩展策略

  • 您可以为 Auto Scaling 组提供多个目标跟踪扩展策略,前提是它们各自使用不同的指标。Amazon EC2 Auto Scaling 的目的是始终优先考虑可用性,因此其行为会有所不同,具体取决于目标跟踪策略是否已准备好扩展或缩减。如果任何目标跟踪策略已准备好进行扩展,它将扩展 Auto Scaling 组,但仅在所有目标跟踪策略(启用了缩减部分)准备好缩减时才执行缩减。

  • 您可以禁用目标跟踪扩展策略的缩减部分。通过使用该功能,您可以灵活地使用不同的方法缩减 Auto Scaling 组。例如,您可以使用不同的扩展策略类型进行缩减,同时使用目标跟踪扩展策略进行扩展。

  • 不要编辑或删除为目标跟踪扩展策略配置的 CloudWatch 警报。当您删除扩展策略时,将自动删除与目标跟踪扩展策略关联的 CloudWatch 警报。

  • 您还可以为 Amazon EC2 以外的资源使用目标跟踪扩展。有关更多信息,请参阅 Application Auto Scaling 用户指南 中的目标跟踪扩展策略

选择指标

您可以使用 Amazon EC2 控制台根据预定义的指标应用目标跟踪扩展策略。另外,您可以使用 Amazon EC2 Auto Scaling CLI 或 API 以根据预定义或自定义的指标来应用扩展策略。可供使用的预定义指标如下:

  • ASGAverageCPUUtilization—Auto Scaling 组的平均 CPU 使用率。

  • ASGAverageNetworkIn—Auto Scaling 组在所有网络接口上收到的平均字节数。

  • ASGAverageNetworkOut—Auto Scaling 组在所有网络接口上发送的平均字节数。

  • ALBRequestCountPerTarget—Application Load Balancer 目标组中每个目标完成的请求数。

您可以通过指定自定义指标来选择其他可用 Amazon CloudWatch 指标。

选择指标时请记住原则:

  • 并非所有指标都适用于目标跟踪。当指定自定义指标时,这可能很重要。指标必须是有效的使用率指标,它用于描述实例的繁忙程度。指标值必须随着 Auto Scaling 组中的实例数按比例增加或减少。这样,指标数据可用于随实例数量按比例扩展或缩减。例如,如果某个 Auto Scaling 组的负载分布在各个实例上,则该 Auto Scaling 组的 CPU 使用率指标(即指标维度为 AutoScalingGroupName 的 Amazon EC2 指标 CPUUtilization)能够正常工作。

  • 以下指标不适用于目标跟踪:

    • Auto Scaling 组前面的负载均衡器收到的请求数(即,Elastic Load Balancing 指标 RequestCount)。负载均衡器收到的请求数不会根据 Auto Scaling 组的使用率而发生变化。

    • 负载均衡器请求延迟(即,Elastic Load Balancing 指标 Latency)。请求延迟可能会根据使用率增加而增加,但不一定按比例变化。

    • CloudWatch SQS 队列指标 ApproximateNumberOfMessagesVisible。队列中的消息数可能不会随着处理队列中的消息的 Auto Scaling 组的大小按比例发生变化。但是,用于测量消息数(Auto Scaling 组的每个 EC2 实例的队列中)的自定义指标能够正常工作。有关更多信息,请参阅 基于 Amazon SQS 进行扩展

  • 当指定指标数据不足时,目标跟踪扩展策略不会扩展 Auto Scaling 组,除非您使用 ALBRequestCountPerTarget 指标。其中的原理是 ALBRequestCountPerTarget 指标为不存在关联数据的时间段发出零,而且目标跟踪处理需要指标数据来解释低使用率趋势。要实现在不存在路由到目标组的请求时使您的 Auto Scaling 组缩减为 0 个实例,组的最小容量必须设置为 0。

创建具有目标跟踪扩展策略的 Auto Scaling 组(控制台)

创建具有目标跟踪扩展策略的 Auto Scaling 组

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling 组

  3. 选择 Create Auto Scaling group

  4. Create Auto Scaling Group 页面上,执行以下操作之一:

    • 选择 Create an Auto Scaling group from an existing launch configuration,选择现有的启动配置,然后选择 Next Step (下一步)

    • 如果您没有想要使用的启动配置,请选择 Create a new launch configuration,然后按照指示操作。有关更多信息,请参阅创建启动配置

  5. 配置 Auto Scaling 组详细信息页面上,执行以下操作:

    1. 对于 组名,输入 Auto Scaling 组的名称。

    2. 组大小中,输入 Auto Scaling 组所需的容量。

    3. 如果启动配置指定需要 VPC 的实例(如 T2 实例),则必须从 Network 选择一个 VPC。另外,如果您的 AWS 账户支持 EC2-Classic 并且这些实例不需要 VPC,您可以选择 Launch into EC2-Classic 或 VPC。

    4. 如果您在上一步中选择了 VPC,请从 Subnet 中选择一个或多个子网。如果您在上一步中已选择 EC2-Classic,请从 Availability Zone(s) 中选择一个或多个可用区。

    5. 选择 Next: Configure scaling policies

  6. Configure scaling policies (配置扩展策略) 页面上,执行以下操作:

    1. 选择 Use scaling policies to adjust the capacity of this group (使用扩展策略调整此组的容量)

    2. 使用以 Scale between (扩展范围) 开头的行指定 Auto Scaling 组的最小大小和最大大小。例如,如果组已经是最大大小,则指定一个新的最大值才能进行扩展。

    3. 对于 Scale Group Size,指定扩展策略。您可以选择为该策略指定名称,然后为指标类型选择一个值。

    4. 为指标指定 Target value

    5. 实例需要指定实例预热值,用于控制新启动的实例在多长时间后开始作用于 CloudWatch 指标。

    6. 选中 Disable scale-in 选项则只创建扩展策略。这样,可以根据需要创建独立的其他类型的缩减策略。

    7. 选择 Review

    8. Review 页面上,选择 Create Auto Scaling group

实例预热

您可以指定新启动实例的预热时间(秒)。在指定预热时间过期前,实例不会计入 Auto Scaling 组的聚合指标。

在扩展时,我们不会将正在预热的实例看作当前组容量的一部分。这可确保添加的实例不会超出您的需要。

在缩减时,我们会将正在终止的实例视为当前组容量的一部分。因此不会从 Auto Scaling 组中删除更多实例。

正在进行扩展活动时不能启动收缩活动。

创建目标跟踪扩展策略 (AWS CLI)

按如下方式使用 AWS CLI 为 Auto Scaling 组配置目标跟踪扩展策略。

步骤 1:创建 Auto Scaling 组

可以使用 create-auto-scaling-group 命令通过启动配置 my-launch-config 创建一个名为 my-asg 的 Auto Scaling 组。如果您没有要使用的启动配置,可以创建一个。有关更多信息,请参阅 create-launch-configuration

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg \ --launch-configuration-name my-launch-config \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782" \ --max-size 5 --min-size 1

步骤 2:创建目标跟踪扩展策略

您可以创建目标跟踪扩展策略,指示 Auto Scaling 组在应用程序负载变化时动态地增加或减少组中正在运行的 EC2 实例数量。

示例:目标跟踪配置文件

下面是一个目标跟踪配置文件示例 (应将其另存为 config.json):

{ "TargetValue": 40.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "ASGAverageCPUUtilization" } }

或者,您可以通过创建自定义指标规范并为 CloudWatch 中的每个参数添加值来自定义用于扩展的指标。以下是一个示例目标跟踪配置,它将指定指标的平均利用率保持在 40%。

{ "TargetValue":40.0, "CustomizedMetricSpecification":{ "MetricName":"MyUtilizationMetric", "Namespace":"MyNamespace", "Dimensions":[ { "Name":"MyOptionalMetricDimensionName", "Value":"MyOptionalMetricDimensionValue" } ], "Statistic":"Average", "Unit":"Percent" } }

示例:cpu40-target-tracking-scaling-policy

使用 put-scaling-policy 命令以及之前创建的 config.json 文件创建一个名为 cpu40-target-tracking-scaling-policy 的扩展策略,它将 Auto Scaling 组的平均 CPU 使用率保持在 40%:

aws autoscaling put-scaling-policy --policy-name cpu40-target-tracking-scaling-policy \ --auto-scaling-group-name my-asg --policy-type TargetTrackingScaling \ --target-tracking-configuration file://config.json