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

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

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

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

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

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

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

根据应用程序的需求,您可能会发现这些常用扩展指标之一在使用目标跟踪时最适合您,或者可能会发现这些指标的组合或其他指标能够更好地满足您的需求。

Considerations

在为 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 组创建多个目标跟踪扩展策略,前提是它们分别使用不同的指标。Amazon EC2 Auto Scaling 的目的是始终优先考虑可用性,因此其行为会有所不同,具体取决于目标跟踪策略是否已准备好扩展或缩减。如果任何目标跟踪策略已准备好进行扩展,它将扩展 Auto Scaling 组,但仅在所有目标跟踪策略(启用了缩减部分)准备好缩减时才执行缩减。有关更多信息,请参阅 多个动态扩展策略

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

  • 请勿编辑或删除为目标跟踪扩展策略配置的 CloudWatch 警报。与您的目标跟踪扩展策略关联的 CloudWatch 警报由Amazon并在不再需要时自动删除。

选择指标

在目标跟踪扩展策略中,您可以使用预定义指标或自定义指标。

可供使用的预定义指标如下:

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

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

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

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

您可以选择其他可用的 Amazon CloudWatch 指标,也可以通过指定自定义指标来选择 CloudWatch 中您自己的指标。您必须使用Amazon CLI或 SDK,创建带有自定义指标的目标跟踪策略。

选择指标时请记住原则:

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

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

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

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

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

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

  • 使用ALBRequestCountPerTarget指标,您必须指定ResourceLabel参数来标识与指标关联的负载均衡器目标组。

监控 Amazon EC2 指标

为了确保更快地响应指标值的变化,我们建议您以 1 分钟一次的频率对指标进行扩展。如果将随指标扩展的频率设置为 5 分钟,可能会导致响应速度变慢,并根据过期的指标数据进行扩展。

要获取 Amazon EC2 指标的此级别数据,您必须专门启用详细监控功能。默认情况下,Amazon EC2 实例是针对基本监控启用的,也就是说,实例的指标数据以 5 分钟的频率提供。有关更多信息,请参阅 为 Auto Scaling 实例配置监控

实例预热

当您创建目标跟踪扩展策略时,可以指定新启动实例的预热时间(秒数)。在指定预热时间过期前,实例不会计入 Auto Scaling 组的聚合指标。

在扩展时,我们不会将正在预热的实例看作当前组容量的一部分,因此指标不会受启动时更高的资源使用率的影响。这可确保添加的实例不会超出您的需要。

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

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

创建目标跟踪扩展策略(控制台)

您可以选择在创建 Auto Scaling 组时或在创建 Auto Scaling 组之后对其配置目标跟踪扩展策略。

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

  1. 以下网址打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/.

  2. 选择 Create Auto Scaling group (创建 Auto Scaling 组)

  3. 在步骤 1、2 和 3 中,根据需要选择选项,然后继续步骤 4: 配置组大小和扩展策略.

  4. Ulper组大小中,通过更新最小容量和最大容量来指定要在其间扩展的范围。这两个设置允许您的 Auto Scaling 组动态缩放。Amazon EC2 Auto Scaling 按最小容量和最大容量指定的值范围扩展您的组。

  5. Ulper扩展策略中,选择目标跟踪扩展策略.

  6. 要定义策略,请执行以下操作:

    1. 指定策略的名称。

    2. 对于 Metric type (指标类型), 选择一个指标。

      如果您选择每个目标的 Application Load Balancer 请求中,选择目标组.

    3. 为指标指定 Target value

    4. (可选)为 Instances need (实例需要) 指定实例预热值。这样就可以控制新启动的实例在什么时间开始作用于 CloudWatch 指标。

    5. (可选)选择 Disable scale in to create only a scale-out policy (禁用缩减以创建仅扩展策略)。这样,可以根据需要创建独立的其他类型的缩减策略。

  7. 继续创建 Auto Scaling 组。您的扩展策略将在创建 Auto Scaling 组后创建。

为现有 Auto Scaling 组创建目标跟踪扩展策略

  1. 以下网址打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/.

  2. 选中 Auto Scaling 组旁的复选框。

    将在 Auto Scaling groups (Auto Scaling 组) 页面底部打开一个拆分窗格,其中显示有关所选组的信息。

  3. 验证是否正确设置了最小容量和最大容量。例如,如果组已经是最大大小,则指定一个新的最大值才能进行扩展。Amazon EC2 Auto Scaling 不会将您的组扩展至最小或最大容量范围以下。要更新组,请在 Details (详细信息) 选项卡上,更改最小容量和最大容量的当前设置。

  4. 在存储库的自动扩展选项卡, 在扩展策略中,选择创建动态扩展策略.

  5. 要定义策略,请执行以下操作:

    1. 对于 Policy type (策略类型),保留默认的 Target tracking scaling (目标跟踪扩展)

    2. 指定策略的名称。

    3. 对于 Metric type (指标类型), 选择一个指标。您只能选择一种指标类型。要使用多个指标,请创建多个策略。

      如果您选择每个目标的 Application Load Balancer 请求中,选择目标组.

    4. 为指标指定 Target value

    5. (可选)为 Instances need (实例需要) 指定实例预热值。这样就可以控制新启动的实例在什么时间开始作用于 CloudWatch 指标。

    6. (可选)选择 Disable scale in to create only a scale-out policy (禁用缩减以创建仅扩展策略)。这样,可以根据需要创建独立的其他类型的缩减策略。

  6. 选择创建

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

使用Amazon CLI,以配置 Auto Scaling 组的目标跟踪扩展策略。

第 1 步:创建 Auto Scaling 组

使用create-auto-scaling-group命令创建 Auto Scaling 组的步骤my-asg使用启动配置my-launch-config. 如果您没有要使用的启动配置,可以通过调用create-launch-group.

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

示例:目标跟踪配置文件

以下是将 CPU 平均使用率保持在 40% 的示例目标跟踪配置。将此配置保存在名为 config.json 的文件中。

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

有关更多信息,请参阅 。PredefinedMetricSpecification中的Amazon EC2 Auto Scaling API 参考.

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

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

有关更多信息,请参阅 。CustomizedMetricSpecification中的Amazon EC2 Auto Scaling API 参考.

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

使用put-caling 策略命令以及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

如果成功,此命令将返回代表您创建的两个 CloudWatch 警报的 ARN 和 ARN 名称。

{ "PolicyARN": "arn:aws:autoscaling:region:account-id:scalingPolicy:228f02c2-c665-4bfd-aaac-8b04080bea3c:autoScalingGroupName/my-asg:policyName/cpu40-target-tracking-scaling-policy", "Alarms": [ { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:region:account-id:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" } ] }