为 Auto Scaling 组设置原定设置实例预热 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

为 Auto Scaling 组设置原定设置实例预热

CloudWatch 在 Auto Scaling 实例中收集和聚合使用情况数据,例如 CPU 和网络 I/O。您可以使用这些指标来创建扩缩策略,以随着所选指标值的增减调整 Auto Scaling 组中的实例数量。

您可以指定实例在达到InService状态后等待多长时间才能向聚合指标提供使用数据。此指定时间称为默认实例预热。这可以防止动态扩展受到尚未处理应用程序流量且计算资源使用率可能暂时过高的单个实例的指标的影响。

为了优化目标跟踪和步进扩展策略的性能,我们强烈建议您启用和配置默认的实例预热。默认情况下,它未启用或配置。

启用默认实例预热时,请记住,如果您的 Auto Scaling 组设置为使用实例维护策略,或者您使用实例刷新来替换实例,则可以在实例完成初始化之前阻止将其计入最低运行状况百分比。

扩缩性能注意事项

对于大多数应用程序来说,有一个适用于所有功能的默认实例预热时间,而不是为不同的功能设置不同的预热时间,这很有用。例如,如果您未设置默认的实例预热时间,则实例刷新功能将使用运行状况检查宽限期作为默认预热时间。如果您有任何目标跟踪和步进缩放策略,它们会使用为默认冷却时间设置的值作为默认预热时间。如果您有任何预测性扩展策略,则它们没有默认的预热时间。

当实例预热时,只有当未预热的实例的指标值大于策略的警报高阈值(或目标跟踪扩展策略的目标利用率)时,您的动态扩展策略才会横向扩展。如果需求减少,动态扩展将变得更加保守,以保护应用程序的可用性。这会阻止用于动态扩展的缩小活动,直到新实例完成预热。

在扩展时,Amazon EC2 Auto Scaling 在决定向该组添加多少实例时,会将正在预热的实例视为组容量的一部分。因此,需要添加相似容量的多个警报漏洞会导致一次扩展活动。其目的是不断扩大规模,但不要过度扩张。

如果未启用默认实例预热,则实例在向其发送指标 CloudWatch 并将其计入当前容量之前等待的时间将因实例而异。因此,与实际发生的工作负载相比,您的扩展策略的性能可能会变得不可预测。

例如,假设一个具有重复 on-and-off 工作负载模式的应用程序。预测性扩缩策略用于对是否增加实例数量做出反复决策。由于预测性扩展策略没有默认的预热时间,因此这些实例会立即开始为聚合指标做出贡献。如果这些实例在启动时资源使用量较高,那么添加实例可能会导致聚合指标出现峰值。这可能会影响使用这些指标的任何动态扩缩策略,具体取决于使用量需要多长时间才能稳定下来。如果突破了动态扩缩策略的警告阈值上限,则该组的大小会再次增加。在新实例预热期间,横向缩减活动将被阻止。

选择默认的实例预热时间

设置原定设置实例预热的关键是确定实例需要多长时间才能完成初始化,以及资源消耗在达到 InService 状态后需要多长时间才能稳定下来。在选择实例预热时间时,请尽量在收集合法流量的使用数据和尽量减少与启动时临时使用量峰值相关的数据收集之间保持最佳平衡。

假设您有一个附加到 Elastic Load Balancing 负载均衡器的自动扩缩组。当新实例完成启动后,它们将在进入 InService 状态之前注册到负载均衡器。在实例进入 InService 状态之后,资源消耗仍然可能会经历暂时的高峰,然后才会逐渐稳定下来。例如,与无需下载大型资产的轻量级 Web 服务器相比,对于必须下载并缓存大型资产的应用程序服务器,其资源消耗将需要更长的时间才能稳定。实例预热提供了稳定资源消耗所需的时间延迟。

重要

如果你不确定预热时间需要多少时间,你可以从 300 秒开始。然后逐渐减少或增加它,直到您的应用程序获得最佳的扩展性能。你可能需要这样做几次才能把它做好。或者,如果您有任何具有自己的预热时间 (EstimatedInstanceWarmup) 的扩展策略,则可以使用此值开始。有关更多信息,请参阅 查找具有先前设定的实例预热时间的扩展策略

对于需要在启动时运行配置任务或脚本的使用案例,应考虑使用生命周期挂钩。生命周期挂钩可以将实例投入使用的时间延迟到实例完成初始化之后。如果引导启动脚本需要一段时间才能完成,则生命周期钩子将特别有用。如果您添加了生命周期挂钩,则可以降低原定设置实例预热的值。有关使用生命周期钩子的更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

为组启用原定设置实例预热

您可以在创建 Auto Scaling 组时启用原定设置实例预热。也可以为现有的组启用此功能。

启用默认实例预热功能后,您无需再为以下功能的预热参数指定值:

Console
为新的组启用原定设置实例预热(控制台)

创建 Auto Scaling 组时,在 Configure advanced options(配置高级选项)页面的 Additional settings(其他设置)下,选择 Enable default instance warmup(启用原定设置实例预热)选项。选择应用程序所需的预热时间。

Amazon CLI
为新的组启用原定设置实例预热(Amazon CLI)

要为 Auto Scaling 组启用原定设置实例预热,请添加 --default-instance-warmup 选项并指定一个介于 0 到 3600 之间的值(以秒为单位)。启用此功能后,将值设为 -1 将会关闭此设置。

以下create-auto-scaling-group命令创建名为 my-asg 的 Auto Scaling 组,并启用值为 120 秒的默认实例预热。

aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120 ...
提示

如果此命令引发错误,请确保已将 Amazon CLI 本地版本更新到最新版本。

Console
为现有的组启用原定设置实例预热(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 在屏幕顶部的导航栏中,选择您在其中创建了自动扩缩组的 Amazon Web Services 区域 。

  3. 选中 Auto Scaling 组旁边的复选框。

    这时将在页面底部打开一个拆分窗格。

  4. Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。

  5. 对于默认实例预热,请选择应用程序所需的预热时间。

  6. 选择更新

Amazon CLI
为现有的组启用原定设置实例预热(Amazon CLI)

以下示例使用update-auto-scaling-group命令为名为 m y-asg 的现有 Auto Scaling 组启用默认实例预热,值为 120 秒。

aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --default-instance-warmup 120
提示

如果此命令引发错误,请确保已将 Amazon CLI 本地版本更新到最新版本。

验证组的原定设置实例预热设置

验证 Auto Scaling 组的原定设置实例预热设置(Amazon CLI)

使用以下 describe-auto-scaling-groups 命令。将my-asg替换为您的自动扩缩组的名称。

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-name my-asg

以下为响应示例。

{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "AutoScalingGroupARN": "arn", ... "DefaultInstanceWarmup": 120 } ] }

查找具有先前设定的实例预热时间的扩展策略

要确定您的策略是否有自己的预热时间,请使用运行以EstimatedInstanceWarmup下 desc ribe-policies 命令。 Amazon CLI将my-asg替换为您的自动扩缩组的名称。

aws autoscaling describe-policies --auto-scaling-group-name my-asg --query 'ScalingPolicies[?EstimatedInstanceWarmup!=`null`]'

下面是示例输出。

[ { "AutoScalingGroupName":"my-asg", "PolicyName":"cpu50-target-tracking-scaling-policy", "PolicyARN":"arn", "PolicyType":"TargetTrackingScaling", "StepAdjustments":[], "EstimatedInstanceWarmup":120, "Alarms":[{ "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e", "AlarmName": "TargetTracking-my-asg-AlarmHigh-fc0e4183-23ac-497e-9992-691c9980c38e" }, { "AlarmARN": "arn:aws:cloudwatch:us-west-2:123456789012:alarm:TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2", "AlarmName": "TargetTracking-my-asg-AlarmLow-61a39305-ed0c-47af-bd9e-471a352ee1a2" }], "TargetTrackingConfiguration":{ "PredefinedMetricSpecification":{ "PredefinedMetricType":"ASGAverageCPUUtilization" }, "TargetValue":50.0, "DisableScaleIn":false }, "Enabled":true }, ... additional policies ... ]

清除先前为扩缩策略设置的实例预热

启用默认实例预热后,更新所有仍有自己的预热时间的扩展策略,以清除先前设置的值。否则,它将覆盖原定设置实例预热。

您可以使用控制台或 Amazon 软件开发工具包更新扩展策略。 Amazon CLI本节介绍控制台的操作步骤。如果您使用 Amazon CLI 或 Amazon 软件开发工具包,请确保保留现有的策略配置,但要移除该EstimatedInstanceWarmup属性。更新现有扩展策略时,该策略将替换为您以编程方式调用PutScalingPolicy时指定的策略。不保留原始值。

清除先前为扩缩策略设置的实例预热(控制台)
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

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

    这时将在页面底部打开一个拆分窗格。

  3. 自动扩缩选项卡的动态扩缩策略中,选择您感兴趣的策略,然后依次选择操作编辑

  4. 对于实例预热,请清除实例预热值以改用默认的实例预热值。

  5. 选择更新