控制在横向缩减过程中要终止的 Auto Scaling 实例
Amazon EC2 Auto Scaling 使用终止策略来确定它在扩展事件期间首先终止哪些实例。终止策略定义了 Amazon EC2 Auto Scaling 在选择要终止的实例时使用的终止条件。
Auto Scaling 组使用默认终止策略,但您可以根据自己的终止条件选择或创建自己的终止策略。这样,您就可以确保根据您的特定应用程序需求终止您的实例。
Amazon EC2 Auto Scaling 还提供了实例缩减保护。启用此功能后,它会防止在扩展事件期间终止实例。您可以在创建 Auto Scaling 组时启用实例缩减保护,并可以更改运行的实例上的设置。如果您在现有 Auto Scaling 组上启用实例缩减保护,则在此之后启动的所有新实例都将启用实例缩减保护。
注意
实例扩展保护不能保证在发生人为错误时不会终止实例,例如,有人使用 Amazon EC2 控制台或 Amazon CLI 手动终止。要防止您的实例被意外终止,可使用 Amazon EC2 终止保护。但是,即使启用了终止保护和实例扩展保护,如果运行状况检查确定实例运行状况不佳或组本身被意外删除,保存到实例存储的数据也可能会丢失。与任何环境一样,最佳做法是频繁备份您的数据,或者在适合您的业务连续性要求时备份数据。
终止策略使用方案
下面的部分介绍 Amazon EC2 Auto Scaling 使用终止策略的情形。
缩减事件
当 Auto Scaling 组的所需容量有一个低于该组当前容量的新值时,就会发生放大事件。
在以下情况下发生扩展事件:
-
使用动态扩展策略时,组的大小会因指标值的更改而减小
-
当使用计划的扩展时,组的大小由于计划的操作而减小
-
当手动减小组的大小
以下示例显示了在发生扩展事件时终止策略的工作原理。
-
例如,假设您有一个包含一个实例类型、两个可用区和两个实例所需容量的 Auto Scaling group 组。它还具有一个动态扩展策略,可在资源利用率增加或减少时添加和删除实例。该组中的两个实例分布在两个可用区之间,如下图所示。
-
当 Auto Scaling 组扩展时,Amazon EC2 Auto Scaling 会启动一个新实例。Auto Scaling 组现在有三个实例,分布在两个可用区,如下图所示。
-
当 Auto Scaling 组扩展时,Amazon EC2 Auto Scaling 将终止其中一个实例。
-
如果您没有为该组分配特定的终止策略,则 Amazon EC2 Auto Scaling 使用默认终止策略。该策略会选择具有两个实例的可用区,并终止从最老的启动木板或启动配置启动的实例。如果这些实例是从同一启动模板或启动配置启动的,Amazon EC2 Auto Scaling 会选择终止最接近下个计费小时的实例。
实例刷新
您可以启动实例刷新以更新 Auto Scaling 组中的实例。在实例刷新期间,Amazon EC2 Auto Scaling 会终止组中的实例,并启动已终止实例的替换实例。Auto Scaling 组的终止策略控制首先替换哪些实例。
重新平衡可用区
Amazon EC2 Auto Scaling 在为 Auto Scaling 组启用的可用区之间均匀平衡您的容量。这有助于减少可用区中断的影响。如果跨可用区域的容量分配不平衡,Amazon EC2 Auto Scaling 会重新平衡 Auto Scaling 组,方法是在具有最少实例的已启用可用区中启动实例,并在其他地方终止实例。终止策略控制哪些实例优先终止。
跨可用区的实例分布可能失去平衡的原因有很多。
- 移除实例
-
如果您从 Auto Scaling 组中分离实例,将实例置于备用状态或者明确终止实例并减少所需容量,从而阻止启动替换实例,则该组可能会变得不平衡。若出现这种情况,Amazon EC2 Auto Scaling 将通过再平衡可用区来进行补偿。
- 使用不同于最初指定的可用区
-
如果您扩展 Auto Scaling 组以包含更多可用区,或者更改所使用的可用区,则 Amazon EC2 Auto Scaling 会在新可用区中启动实例并终止其他可用区中的实例,以帮助确保实例在各个可用区中均匀分布。
- 可用性中断
-
可用性中断的情况很少发生。但是,如果某个可用区变得不可用并稍后恢复,则您的 Auto Scaling 组可能会在可用区之间变得不均衡。Amazon EC2 Auto Scaling 会尝试逐步再平衡该组,而该再平衡操作可能会终止其他区中的实例。
例如,假设您有一个包含一个实例类型、两个可用区和两个实例所需容量的 Auto Scaling 组。当一个可用区出现故障时,Amazon EC2 Auto Scaling 会在运行状况良好的可用区中自动启动一个新实例,以替换运行状况不佳的可用区中的实例。当运行状况不佳的可用区恢复到正常状态时,Amazon EC2 Auto Scaling 会自动在此可用区中启动一个新实例,同时终止未受影响的可用区中的实例。
注意
再平衡时,Amazon EC2 Auto Scaling 在终止旧实例之前启动新实例,所以再平衡不会损害应用程序的性能或可用性。
因为 Amazon EC2 Auto Scaling 尝试在终止旧实例之前启动新实例,所以达到或接近指定的最大容量可能会阻碍或完全停止再平衡活动。为避免此问题,在再平衡活动期间,系统可以暂时超出某组的指定最大容量的 10%(或 1 个实例边缘,以较大者为准)。仅当该组达到或接近最大容量,并需要重新平衡时,才可超出容量限制;此类情况的原因是用户请求重新分区,或者是为了弥补区域可用性问题。该超出状态仅持续重新平衡该组所需的时间。