暂停和恢复 Auto Scaling 组的进程
本主题介绍如何暂停然后恢复您的 Auto Scaling 组的一个或多个扩展进程。例如,这样操作可能会便于您调查导致进程失败的配置问题,或者防止 Amazon EC2 Auto Scaling 在您更改自动扩缩组时将实例标记为运行不正常并予以替换。
除在启动时暂停外,Amazon EC2 Auto Scaling 也可以暂停多次启动实例失败的 Auto Scaling 组。这称为管理暂停。管理暂停最常用于符合以下条件的 Auto Scaling 组:连续尝试启动实例的时间超过 24 小时,但是未成功启动任何实例。您可以恢复由于管理原因被 Amazon EC2 Auto Scaling 暂停的进程。
进程的类型
暂停-恢复功能支持以下进程:
-
Launch
– 在自动扩缩组横向扩展时,或者在 Amazon EC2 Auto Scaling 因其他原因(例如将实例添加到暖池时)选择启动实例时,将实例添加到该组中。 -
Terminate
– 在自动扩缩组横向缩减时,或者在 Amazon EC2 Auto Scaling 因其他原因(例如,实例因超过其最长生命周期或未通过运行状况检查而被终止时)选择终止实例时,将实例从该组中移除。 -
AddToLoadBalancer
—在实例启动时,将其添加到附上的负载均衡器目标组或者经典负载均衡器。有关更多信息,请参阅使用 Elastic Load Balancing 跨 Auto Scaling 组中的实例分配流量。。 -
AlarmNotification
– 接受来自与动态扩缩策略关联的 CloudWatch 警报的通知。有关更多信息,请参阅Amazon EC2 Auto Scaling 的动态扩缩。 -
AZRebalance
– 在该组失去均衡时(例如,之前不可用的可用区恢复到正常状态时),在指定的所有可用区之间均匀调整该组中的 EC2 实例数量。有关更多信息,请参阅再平衡活动。 -
HealthCheck
- 检查实例的运行状况,如果 Amazon EC2 或 Elastic Load Balancing 通知 Amazon EC2 Auto Scaling 实例运行状况不佳,则将对应实例标记为运行状况不佳。此流程可覆盖您手动设置的实例运行状况状态。有关更多信息,请参阅Auto Scaling 实例的运行状况检查。 -
InstanceRefresh
-使用实例刷新功能终止和替换实例。有关更多信息,请参阅 基于实例刷新替换 Auto Scaling 实例。 -
ReplaceUnhealthy
— 终止被标记为运行状况不佳的实例,然后创建新实例以替换它们。有关更多信息,请参阅Auto Scaling 实例的运行状况检查。 -
ScheduledActions
-执行您创建的计划扩展操作,或您在创建 Amazon Auto Scaling 扩展计划并启用预测扩展时创建的计划扩展操作。有关更多信息,请参阅Amazon EC2 Auto Scaling 的计划扩缩。
注意事项
暂停进程之前,请注意以下事项:
-
您可以暂停和恢复单个流程或所有流程。
-
暂停进程将影响自动扩缩组中的所有实例。例如,您可以暂停
HealthCheck
和ReplaceUnhealthy
进程以重启实例,但不让 Amazon EC2 Auto Scaling 根据运行状况检查的结果终止实例。如果需要 Amazon EC2 Auto Scaling 对剩余实例执行运行状况检查,则使用备用功能而不是暂停-恢复功能。有关更多信息,请参阅临时从 Auto Scaling 组中移除实例。 -
通过暂停
AlarmNotification
,您可以暂时停止该组的目标跟踪、步进和简单扩缩策略,而不删除扩缩策略或其关联的 CloudWatch 警报。要暂时停止单个扩缩策略,请参阅禁用 Auto Scaling 组的扩缩策略。 -
如果您暂停了
Launch
和Terminate
进程或者AZRebalance
,并且随后对自动扩缩组进行了更改(例如,分离实例或更改指定的可用区),则您的组可能会在可用区之间失去均衡。如果出现这种情况,在您恢复暂停的流程后,Amazon EC2 Auto Scaling 将逐步在可用区之间均匀地重新分配实例。 -
暂停
Terminate
过程不会以 delete-auto-scaling-group 命令通过强制删除选项阻止实例成功终止。 -
如果
RemoveFromLoadBalancerLowPriority
过程出现在使用 Amazon CLI 或开发工具包描述自动扩缩组的调用中,则应忽略该过程。此过程已过时,保留此过程仅是为了向后兼容。
了解暂停进程如何影响其他进程
下文说明暂停各个扩展类型时会发生什么。
场景 1:暂停 Launch
-
AlarmNotification
仍处于活动状态,但是您的自动扩缩组无法为超限警报启动横向扩展活动。 -
ScheduledActions
处于活动状态,但是您的自动扩缩组无法为出现的任何计划操作启动横向扩展活动。 -
AZRebalance
停止对组进行重新平衡。 -
ReplaceUnhealthy
继续终止运行不正常的实例,但不启动替换实例。Launch
过程恢复后,Amazon EC2 Auto Scaling 会立即替换它在Launch
被暂停期间终止的所有实例。 -
InstanceRefresh
不会替换实例。
场景 2:暂停 Terminate
-
AlarmNotification
仍处于活动状态,但是您的自动扩缩组无法为超限警报启动横向缩减活动。 -
ScheduledActions
处于活动状态,但是您的自动扩缩组无法为出现的任何计划操作启动横向缩减活动。 -
AZRebalance
仍处于活动状态,但不能正常运行。它可以启动新实例而不终止旧实例。这可能导致您的 Auto Scaling 组增加到比最大大小超出百分之十,因为在重新平衡活动期间允许短时间内发生这种情况。您的 Auto Scaling 组可以保持超出其最大大小,直到您恢复Terminate
进程。 -
ReplaceUnhealthy
处于非活动状态但未HealthCheck
。当Terminate
恢复后,ReplaceUnhealthy
进程将立即开始运行。如果任何实例在Terminate
暂停期间被标记为运行状况不佳,将立即替换它们。 -
InstanceRefresh
不会替换实例。
场景 3:暂停 AddToLoadBalancer
-
Amazon EC2 Auto Scaling 会启动实例,但不会将实例添加到负载均衡器目标组或经典负载均衡器。在您恢复
AddToLoadBalancer
进程后,该进程也会在启动实例时将其添加到负载均衡器。不过,它不会添加在此流程暂停时启动的实例。您必须手动注册这些实例。
场景 4:暂停 AlarmNotification
-
当超出 CloudWatch 警报阈值时,Amazon EC2 Auto Scaling 不会调用扩缩策略。当您恢复
AlarmNotification
时,Amazon EC2 Auto Scaling 考虑具有当前违反的警报阈值的策略。
场景 5:暂停 AZRebalance
-
Amazon EC2 Auto Scaling 不会在某些事件发生后尝试重新分配实例。如果发生扩展或缩减事件,扩展进程仍会尝试均衡可用区。例如,在扩展期间,它会在实例最少的可用区中启动实例。如果组变得不平衡,同时
AZRebalance
处于暂停状态并且您恢复它,Amazon EC2 Auto Scaling 会尝试重新平衡组。它先调用Launch
,然后调用Terminate
。
场景 6:暂停 HealthCheck
-
Amazon EC2 Auto Scaling 停止在 EC2 和 Elastic Load Balancing 运行状况检查后将实例标记为运行状况不佳。您的自定义运行状况检查会继续正常运行。当您暂停
HealthCheck
后,在需要时可以手动设置组中实例的运行状况,并由ReplaceUnhealthy
替换它们。
场景 7:暂停 InstanceRefresh
-
Amazon EC2 Auto Scaling 停止因实例刷新而替换实例。如果正在刷新实例,则会暂停操作而不将其取消。
场景 8:暂停 ReplaceUnhealthy
-
Amazon EC2 Auto Scaling 停止替换标记为运行状况不佳的实例。未通过 EC2 或 Elastic Load Balancing 运行状况检查的实例仍会被标记为运行状况不佳。一旦您恢复
ReplaceUnhealthy
进程,Amazon EC2 Auto Scaling 会替换在此进程暂停时标记为运行状况不佳的实例。ReplaceUnhealthy
进程会首先调用Terminate
,然后调用Launch
。
场景 9:暂停 ScheduledActions
-
Amazon EC2 Auto Scaling 不会运行计划在暂停期间运行的计划操作。当您恢复
ScheduledActions
后,Amazon EC2 Auto Scaling 仅考虑其计划时间尚未过期的计划操作。
其它注意事项
此外,在暂停 Launch
或 Terminate
时,以下功能可能无法正常运行:
-
Maximum instance lifetime(最大实例生命周期)– 暂停
Launch
或者Terminate
时,则最大实例生命周期功能无法替换任何实例。 -
竞价型实例中断—如果
Terminate
已暂停而您的 Auto Scaling 组包含竞价型实例,它们在竞价容量不再可用的情况下仍会终止。暂停Launch
时,Amazon EC2 Auto Scaling 无法从其他竞价型实例池启动替换实例,也无法在同一竞价型实例池再次可用时启动替换实例。 -
Capacity Rebalancing(容量再平衡)– 如果暂停了
Terminate
并且您使用容量再平衡以编程方式处理竞价型实例中断,则当竞价型容量不再可用时,Amazon EC2 竞价型服务仍可以终止实例。如果暂停Launch
,Amazon EC2 Auto Scaling 无法从其他竞价型实例池启动替换实例,也无法在同一竞价型实例池再次可用时启动替换实例。 -
Attaching and detaching instances(附加和分离实例)– 暂停
Launch
和Terminate
时,您可以分离附加到自动扩缩组的实例,但在暂停Launch
期间,您无法将新实例附加到该组。 -
Standby instances(备用实例)– 暂停
Launch
和Terminate
时,您可以将实例置于Standby
状态,但在暂停Launch
期间,您无法将处于Standby
状态的实例重设为服务状态。
暂停和恢复扩展进程(控制台)
使用以下过程暂停进程。
暂停一个流程
访问 https://console.aws.amazon.com/ec2/
,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。 -
选中 Auto Scaling 组旁边的复选框。
这时将在 Auto Scaling groups(Auto Scaling 组)页面底部打开一个拆分窗格。
-
在 Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。
-
对于 Suspended processes(暂停的进程),选择要暂停的进程。
-
选择 Update(更新)。
准备就绪后,请使用以下过程恢复暂停的进程。
恢复进程
-
在 Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。
-
对于 Suspended processes(已暂停的进程),移除该已暂停的进程。
-
选择 Update(更新)。
暂停和恢复进程 (Amazon CLI)
使用下面的 suspend-processes 命令暂停单个进程。
aws autoscaling suspend-processes --auto-scaling-group-name
my-asg
--scaling-processesHealthCheck
ReplaceUnhealthy
要暂停所有进程,请忽略 --scaling-processes
选项,如下所示。
aws autoscaling suspend-processes --auto-scaling-group-name
my-asg
准备就绪可以恢复已暂停的进程时,请使用下面的 resume-processes 命令。
aws autoscaling resume-processes --auto-scaling-group-name
my-asg
--scaling-processesHealthCheck
要恢复所有已暂停的进程,请忽略 --scaling-processes
选项,如下所示。
aws autoscaling resume-processes --auto-scaling-group-name
my-asg