为 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状态后等待多长时间才能向聚合指标提供使用数据。从而防止动态扩缩受到尚未处理应用程序流量,并且可能暂时存在计算资源使用率较高的单个实例的指标影响。

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

除了影响扩展性能外,默认实例预热还会影响使用实例刷新和最长实例生命周期等功能替换实例所需的总体时间。

扩展性能注意事项

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

当实例预热时,只有当未预热的实例的指标值大于策略的警报高阈值(或目标跟踪扩展策略的目标利用率)时,您的动态扩展策略才会横向扩展。其目的是在需求下降时谨慎地横向缩减,以保护应用程序的可用性。在实例完成预热之前,此块会缩小以进行动态扩展。

在扩展时,在决定向组中添加多少实例时,我们会将正在预热的实例视为该组理论容量的一部分。因此,落入同一分步调整中的多个警报违例只会导致一个扩展活动。旨在持续 (但不过度) 扩大。有关更多信息,请参阅分步扩展主题中的实例预热部分。

如果未启用默认实例预热,则实例在向其发送指标 CloudWatch 并将其计入当前容量之前等待的时间将因实例而异。在这种情况下,与实际发生的工作负载相比,您的扩展策略可能会出现无法预测的执行情况。

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

选择默认的实例预热时间

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

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

重要

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

根据您的小组是否使用任何生命周期挂钩,您可能可以使用更短的预热时间。

如果 然后
您的 Auto Scaling 组有一个生命周期挂钩,可以将实例的投入使用延迟到它们完成初始化为止。 您可以将默认实例预热时间设置为较短的持续时间。
您的 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. 对于 Default instance warmup(原定设置实例预热),选择应用程序所需的预热时间。

  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 命令。

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 替换为您的 Auto Scaling 组的名称。

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

下面是示例输出。

[ { "AutoScalingGroupName":"my-asg", "PolicyName":"cpu40-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":40.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. 选择更新