适用于 Amazon EC2 Auto Scaling 的扩展冷却时间 - Amazon EC2 Auto Scaling

适用于 Amazon EC2 Auto Scaling 的扩展冷却时间

扩展冷却时间有助于防止 Auto Scaling 组在先前活动产生明显的影响之前启动或终止其他实例。

当您使用简单扩展时,Auto Scaling 组在使用简单扩展策略扩展后,会等到冷却时间完成,然后再执行简单扩展策略可以启动的任何扩展活动。充足的冷却时间有助于防止基于陈旧指标启动其他扩展活动。默认情况下,所有简单扩展策略都使用与您的 Auto Scaling 组关联的默认冷却时间,但您可以为特定策略配置不同的冷却时间,如以下各节所述。有关简单扩展的更多信息,请参阅步进和简单扩展策略

重要

在大多数情况下,对于扩展性能而言,相比在有扩展活动之后等待一段固定的时间,目标跟踪扩展策略或步进扩展策略性能更好。对于随着扩展指标值的减小或增加而按比例更改 Auto Scaling 组大小的扩展策略,我们建议采用目标跟踪而不是简单扩展或步进扩展。

在冷却时间,如果计划的操作在计划的时间开始,或者由于目标跟踪或步进扩展策略而开始扩展活动时,它们可以立即触发扩展活动,而无需等待冷却时间过期。如果实例运行状况不佳,Amazon EC2 Auto Scaling 同样不会等到冷却时间结束才替换运行状况不佳的实例。

当您手动扩展 Auto Scaling 组时,默认行为是不等待冷却时间完成,但您可以在调用 API 时覆盖此行为并遵循冷却时间。

默认冷却时间

默认冷却时间自动应用于简单扩展策略的任何扩展活动,您可以选择请求将其应用于您的手动扩展活动。可以根据实例启动时间或其他应用程序需求配置时间长度。


                    显示默认冷却时间如何影响扩展操作的流程图。

当您使用 AWS 管理控制台 来更新 Auto Scaling 组时,或使用 AWS CLI 或 AWS 开发工具包来创建或更新 Auto Scaling 组时,您可以设置可选的默认冷却时间参数。如果未提供默认冷却时间的值,其默认值为 300 秒。

修改默认冷却时间(控制台)

以常规方式创建 Auto Scaling 组。创建 Auto Scaling 组后,编辑组以指定默认冷却时间。

修改默认冷却时间 (AWS CLI)

使用以下命令之一:

特定于扩展的冷却时间

除了指定 Auto Scaling 组的默认冷却时间外,您还可以创建适用于特定简单扩展策略的冷却时间。特定于扩展的冷却时间会覆盖默认冷却时间。

特定于扩展的冷却时间的一个常见用例是缩减策略。由于此策略是要终止实例,Amazon EC2 Auto Scaling 需要较短的时间来确定是否终止其他实例。终止实例应该是比启动实例快得多的操作。因此,300 秒的默认冷却时间太长。在这种情况下,对于缩减策略,具有较低值 180 秒的特定于扩展冷却时间使得组可以更快地缩减,从而有助于减少成本。

要指定特定于扩展的冷却时间,请在创建或更新简单扩展策略时使用可选的冷却时间参数。有关更多信息,请参阅 步进和简单扩展策略

简单扩展冷却方案示例

考虑以下情景:有一个在 AWS 中运行的 Web 应用程序。此 Web 应用程序包含三个基本层:Web、应用程序和数据库。为了确保应用程序始终拥有足够的资源来满足流量需求,您创建了两个 Auto Scaling 组:一个用于 Web 层,一个用于应用程序层。


                    包含一个 Web 层和一个应用程序层的基本网络架构。

为了帮助确保应用程序层的组具有适当数量的 EC2 实例,您可以创建一个简单扩展策略,以在连续指定时段中,与扩展策略关联的 CloudWatch 指标值超过指定阈值时进行扩展。当 CloudWatch 警报触发扩展策略时,Auto Scaling 组会启动并配置另一个实例。

在实例投入使用之前,这些实例使用配置脚本安装和配置软件。因此,实例从启动到完全投入使用大约需要两到三分钟的时间。实际时间取决于诸多因素,如实例大小和是否有启动脚本要完成等。

现在出现了流量高峰,从而导致 CloudWatch 警报触发。该警报触发时,Auto Scaling 组会启动一个实例来帮助处理增加的需求。但是存在一个问题:该实例需要几分钟的时间才能启动。在此期间,对于任何标准精度警报,可能会持续每分钟触发 CloudWatch 警报,从而导致 Auto Scaling 组在警报每次触发时都另外启动一个实例。


                    CloudWatch 警报与扩展策略协同工作的示例

但是,有了冷却时间,Auto Scaling 组启动一个实例,然后阻止简单扩展策略引起的扩展活动,直至经过了指定时间量。(默认值为 300 秒。) 这样,新启动的实例有时间开始处理应用程序流量。冷却时间过去之后,在冷却时间后触发的任何扩展活动都可以恢复。如果 CloudWatch 警报再次触发,则 Auto Scaling 组将启动另一个实例,而冷却时间也会再次生效。不过,如果新增的实例足以将指标值降为正常水平,该组会保持其当前大小。

冷却时间和多个实例

前面部分提供的示例演示了冷却时间在启动或终止单个实例时对 Auto Scaling 组的影响方式。不过,Auto Scaling 组经常一次启动多个实例。例如,您可能会选择让 Auto Scaling 组在达到特定指标阈值时启动三个实例。

对于多个实例,冷却时间(无论是默认冷却时间还是特定于扩展的冷却时间)会在最后一个实例完成启动或终止时开始生效。

冷却时间和生命周期挂钩

您可以选择向 Auto Scaling 组添加生命周期挂钩。通过这些挂钩,您可以控制如何在 Auto Scaling 组中启动和终止实例,从而可以在实例投入使用之前或终止之前对实例执行自定义操作。当发生生命周期操作且实例进入等待状态时,由简单扩展策略引起的扩展活动将暂停。有关更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期挂钩

生命周期挂钩可以影响为 Auto Scaling 组配置的任何冷却时间的开始时间。例如,考虑在实例启动时具有支持自定义操作的生命周期挂钩的 Auto Scaling 组。当简单扩展策略导致应用程序出现需求增加时,该组会启动实例以增加容量。由于存在生命周期挂钩,实例会置于 Pending:Wait 状态,这意味着该实例尚无法用于处理流量。当实例进入等待状态时,简单扩展策略引起的扩展活动会暂停。当实例进入 InService 状态时,冷却时间开始。冷却时间过去之后,在冷却时间后触发的任何扩展活动都可以恢复。

在执行生命周期挂钩后,并非所有冷却时间都会应用

通常,当实例终止时,冷却时间在实例退出 Terminating:Wait 状态之后(在生命周期挂钩执行完成后)才会开始。

不过,在使用 Elastic Load Balancing 时,当终止实例过程完成负载均衡器耗尽连接(注销延迟)并且不等待生命周期挂钩时,Auto Scaling 组会开始冷却时间。这对于使用简单扩展策略来执行缩减和横向扩展的组非常有用。冷却时间的目的是在上一个活动的影响明显可见后,允许下一个扩展活动立即执行。如果实例正在终止,而后对应用程序的需求突然增加,则由简单扩展策略暂停的任何扩展活动都可以在连接耗尽和冷却时间结束后恢复。否则,等待完成所有三个活动(连接耗尽、生命周期挂钩和冷却时间)完成时,会显著增加 Auto Scaling 组需要暂停扩展的时间长度。