Auto Scaling
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

目标跟踪扩展策略

目标跟踪扩展策略可简化配置动态扩展的过程。您可以选择预定义的指标,也可以配置自定义指标并设置一个目标值。Auto Scaling 会创建和管理触发扩展策略的 CloudWatch 警报,并根据指标和目标值计算扩展调整。扩展策略根据需要增加或减少容量,将指标保持在指定的目标值或接近指定的目标值。除了将指标保持在目标值附近以外,目标跟踪扩展策略还能根据负载波动模式调节指标波动,最大限度地减少 Auto Scaling 组容量的快速波动。

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

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

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

指定自定义指标时,请注意,有些指标并不适用于目标跟踪。指标必须是有效的使用率指标,它用于描述实例的繁忙程度。指标值必须与 Auto Scaling 组中的实例数成比例地增加或减少,以便能够利用指标数据按比例地扩展或缩减实例数量。例如,如果某个 Auto Scaling 组的负载分布在各个实例上,则该 Auto Scaling 组的 CPU 使用率指标 (即维度为 AutoScalingGroupName 的 Amazon EC2 指标 CPUUtilization) 能够正常工作。以下指标不起作用:

  • 作为 Auto Scaling 组前端的负载均衡器收到的请求数 (即 Elastic Load Balancing 指标 RequestCount),因为负载均衡器收到的请求数不随 Auto Scaling 组的使用率而改变。

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

  • SQS 指标 ApproximateNumberOfMessagesVisible,因为队列中的消息数量可能不会与处理该队列消息的 Auto Scaling 组的大小成比例变化。但是,如果消息分布在各个实例上,则用于衡量 Auto Scaling 组每实例队列消息数的自定义指标能够正常工作。

您可以为 Auto Scaling 组提供多个目标跟踪扩展策略,前提是它们各自使用不同的指标。对于扩展和收缩,Auto Scaling 组根据在组中提供最大容量的策略进行扩展。这样可以更灵活地覆盖多种场景,确保始终有足够的容量来处理应用程序工作负载。

您还可以选择禁用目标跟踪扩展策略的收缩部分。该功能为您提供了更大的灵活性:您可以使用目标跟踪扩展策略扩展 Auto Scaling 组,同时使用其他的方法 (例如不同的扩展策略类型) 收缩 Auto Scaling 组。

注意事项

请注意以下事项:

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

  • 当指定指标数据不足时,目标跟踪扩展策略不会扩展 Auto Scaling 组。它不会将数据不足解读为使用率低,因此不会收缩 Auto Scaling 组。要在指定指标数据不足时收缩 Auto Scaling 组,请创建一个简单或步进扩展策略,并设置警报在其状态变为 INSUFFICIENT_DATA 时调用该扩展策略。例如,指标 RequestCountPerTarget,这是一个预定义指标,当没有请求被路由到目标组时,它没有数据点。要在没有请求路由到目标组时收缩 Auto Scaling 组,请创建一个简单或步进扩展策略,为该指标创建警报,并将警报设置为在其状态变为 INSUFFICIENT_DATA 时调用该扩展策略。

  • 您可能会看到目标值与实际指标数据点之间存在差距。这是因为 Auto Scaling 在确定需要添加或删除多少个实例时始终通过向上或向下舍入来保守地进行操作,以免 Auto Scaling 添加的实例数量不足或删除的实例数量过多。但是,对于实例较少的 Auto Scaling 组,组的使用率可能偏离目标值较远。例如,假设将 CPUUtilization 的目标值设置为 50%,则当 Auto Scaling 组超出目标值时,Auto Scaling 确定添加 1.5 个实例可将 CPU 使用率降至 50% 左右。由于不可能添加 1.5 个实例,Auto Scaling 将该值向上舍入,添加两个实例。这可能会将 CPU 使用率降至 50% 以下,但可确保应用程序具有充足的支持资源。同样,如果 Auto Scaling 确定删除 1.5 个实例可使 CPU 使用率提高到 50% 以上,它将只删除一个实例。对于实例较多的 Auto Scaling 组,使用率分布在更多的实例上。添加或删除实例会导致目标值与实际指标数据点之间的差距缩小。

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

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

  • 不要编辑或删除 Auto Scaling 为目标跟踪扩展策略管理的 CloudWatch 警报。当您删除 Auto Scaling 策略时,Auto Scaling 会自动删除相应的警报。

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

使用控制台创建具有目标跟踪扩展策略的 Auto Scaling 组。

根据指标创建具有扩展的 Auto Scaling 组

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  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. Configure Auto Scaling group details 页面上,执行以下操作:

    1. 对于 Group name,键入 Auto Scaling 组的名称。

    2. 对于 Group size,键入 Auto Scaling 组所需的容量。

    3. 如果启动配置指定需要 VPC 的实例(如 T2 实例),则必须从 Network 选择一个 VPC。另外,如果您的 AWS 账户支持 EC2-Classic 并且这些实例不需要 VPC,您可以选择 Launch info 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,指定扩展策略。您可以选择为该策略指定名称,然后为 Metric type 选择一个值。

    4. 为指标指定 Target value

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

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

    7. 选择 Review

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

实例预热

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

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

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

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

使用 AWS CLI 配置扩展策略

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

步骤 1:创建 Auto Scaling 组

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

Copy
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --launch-configuration-name my-lc --max-size 5 --min-size 1 --availability-zones "us-west-2c"

第 2 步:创建扩展策略

您可以创建扩展策略,告诉 Auto Scaling 组在指定条件改变时要执行什么操作。

示例:目标跟踪配置文件

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

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

示例:my-scaleout-policy

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

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