Amazon EC2 Auto Scaling
用户指南

暂停和恢复扩展流程

本主题介绍如何暂停然后恢复您的 Auto Scaling 组的一个或多个扩展进程。它还描述了选择使用 Amazon EC2 Auto Scaling 的暂停/恢复功能时要考虑的问题。

重要

如果您需要对实例进行问题排查或重启实例,请使用待机功能而不是暂停/恢复功能。有关更多信息,请参阅 临时从 Auto Scaling 组中删除实例。在自动缩减时,您也可以使用实例保护功能来防止特定实例被终止。有关更多信息,请参阅实例保护

除在启动时暂停外,Amazon EC2 Auto Scaling 也可以暂停多次启动实例失败的 Auto Scaling 组。这称为管理暂停。管理暂停最常用于符合以下条件的 Auto Scaling 组:连续尝试启动实例的时间超过 24 小时,但是未成功启动任何实例。您可以恢复由于管理原因被 Amazon EC2 Auto Scaling 暂停的进程。

扩展流程

对于 Amazon EC2 Auto Scaling,有两种主要进程类型:LaunchTerminateLaunch 进程将新的 Amazon EC2 实例添加到 Auto Scaling 组以增加其容量,而 Terminate 进程从组中删除 Amazon EC2 实例以减少其容量。

Amazon EC2 Auto Scaling 的另一个进程类型与特定扩展功能相关:

  • AddToLoadBalancer - 在实例启动时,将其添加到附加的负载均衡器或目标组。

  • AlarmNotification - 接受来自与组扩展策略关联的 CloudWatch 警报的通知。

  • AZRebalance - 在组变得不均衡时,在指定的所有可用区中均匀平衡组中的 EC2 实例数,例如,之前不可用的可用区恢复到正常状态。有关更多信息,请参阅 再平衡活动

  • HealthCheck - 检查实例的运行状况,如果 Amazon EC2 或 Elastic Load Balancing 通知 Amazon EC2 Auto Scaling 实例运行状况不佳,则将对应实例标记为运行状况不佳。此流程可覆盖您手动设置的实例运行状况状态。有关更多信息,请参阅Auto Scaling 实例的运行状况检查

  • ReplaceUnhealthy - 终止被标记为运行状况不佳的实例,然后创建新实例以替换它们。

  • ScheduledActions - 执行您创建的或 AWS Auto Scaling 的预测扩展功能创建的计划扩展操作。

选择暂停

可以单独暂停和恢复每个进程类型。本节提供在决定暂停扩展进程之前需要考虑的部分指导和行为。请记住,暂停单独进程可能会干扰其他进程。根据暂停进程的原因,您可能需要一起暂停多个进程。

下文说明暂停各个扩展类型时会发生什么。

警告

如果您暂停 LaunchTerminate 进程类型,它可能导致其他进程类型无法正常工作。

Terminate

  • 在暂停进程时,您的 Auto Scaling 组不会缩减到发出警报或执行计划操作。此外,以下进程会中断:

    • AZRebalance 仍处于活动状态,但不能正常运行。它可以启动新实例而不终止旧实例。这可能导致您的 Auto Scaling 组增加到比最大大小超出百分之十,因为在重新平衡活动期间允许短时间内发生这种情况。您的 Auto Scaling 组可以保持超出其最大大小,直到您恢复 Terminate 进程。当 Terminate 恢复后,如果 Auto Scaling 组在可用区之间不再平衡或者指定了不同的可用区,AZRebalance 逐渐重新平衡该组。

    • ReplaceUnhealthy 处于非活动状态但未 HealthCheck。当 Terminate 恢复后,ReplaceUnhealthy 进程将立即开始运行。如果任何实例在 Terminate 暂停期间被标记为运行状况不佳,将立即替换它们。

Launch

  • 您的 Auto Scaling 组在暂停进程期间不会扩展到发出警报或执行计划操作。AZRebalance 会停止重新平衡组。ReplaceUnhealthy 会继续终止运行状况不佳的实例,但不会启动替换实例。在您恢复 Launch 后,通过以下方式完成重新平衡活动和运行状况检查替换:

    • 如果 Auto Scaling 组在可用区之间不再平衡,或者指定了不同的可用区,AZRebalance 会逐渐重新平衡组。

    • ReplaceUnhealthy 会立即替换它在 Launch 暂停期间终止的所有实例。

AddToLoadBalancer

  • Amazon EC2 Auto Scaling 会启动实例,但不会将其添加到负载均衡器或目标组。在您恢复 AddToLoadBalancer 进程后,该进程也会在启动实例时将其添加到负载均衡器或目标组不过,它不会添加在此流程暂停时启动的实例。您必须手动注册这些实例。

AlarmNotification

  • 当超出 CloudWatch 警报阈值时,Amazon EC2 Auto Scaling 不执行扩展策略。暂停 AlarmNotification 可以暂时停止组扩展策略触发的扩展事件,而不删除扩展策略或其关联的 CloudWatch 警报。当您恢复 AlarmNotification 时,Amazon EC2 Auto Scaling 考虑具有当前违反的警报阈值的策略。

AZRebalance

  • 您的 Auto Scaling 组不会在某些事件后尝试重新分配实例。如果发生扩展或缩减事件,扩展进程仍会尝试均衡可用区。例如,在扩展期间,它会在实例最少的可用区中启动实例。如果组变得不平衡,同时 AZRebalance 处于暂停状态并且您恢复它,Amazon EC2 Auto Scaling 会尝试重新平衡组。它先调用 Launch,然后调用 Terminate

HealthCheck

  • Amazon EC2 Auto Scaling 停止在 EC2 和 Elastic Load Balancing 运行状况检查后将实例标记为运行状况不佳。不过,您的自定义运行状况检查会继续正常运行。当您暂停 HealthCheck 后,在需要时可以手动设置组中实例的运行状况,并由 ReplaceUnhealthy 替换它们。

ReplaceUnhealthy

  • Amazon EC2 Auto Scaling 停止替换标记为运行状况不佳的实例。未通过 EC2 或 Elastic Load Balancing 运行状况检查的实例仍会被标记为运行状况不佳。一旦您恢复 ReplaceUnhealthly 进程,Amazon EC2 Auto Scaling 会替换在此进程暂停时标记为运行状况不佳的实例。ReplaceUnhealthy 进程调用两种主要进程类型 — 先调用 Terminate,然后调用 Launch

ScheduledActions

  • 在暂停期间,Amazon EC2 Auto Scaling 不执行计划要运行的扩展操作。当您恢复 ScheduledActions 后,Amazon EC2 Auto Scaling 仅考虑尚未传递其执行时间的计划操作。

同时暂停启动和恢复

当您同时暂停 LaunchTerminate 进程类型时,会发生以下情况:

  • 您的 Auto Scaling 组无法启动扩展活动或保持其所需容量。

  • 如果该组在可用区之间变得不平衡,Amazon EC2 Auto Scaling 不会尝试为您的 Auto Scaling 组在指定可用区之间重新均匀分布实例。

  • 您的 Auto Scaling 组无法替换标记为运行状况不佳的实例。

当您恢复 LaunchTerminate 进程类型时,Amazon EC2 Auto Scaling 会替换在暂停进程期间标记为运行状况不佳的实例,并可能尝试重新平衡组。扩展活动也会恢复。

其他注意事项

LaunchTerminate 暂停时,某些外部操作可能会受影响。

  • Spot 实例中断 — 如果 Terminate 已暂停而您的 Auto Scaling 组包含 Spot 实例,它们在 Spot 容量不再可用的情况下仍会终止。在 Launch 暂停期间,Amazon EC2 Auto Scaling 无法从另一个 Spot 实例池中启动替换实例,或者在其恢复可用后也无法从同一个 Spot 实例池中启动。

  • 附加和分离实例 —当 LaunchTerminate 暂停后,您可以将附加到您的 Auto Scaling 组的实例分离,但不能将新实例附加到组。要附加实例,必须首先恢复 Launch

    注意

    如果分离实例后紧接着手动终止它,您可以改为调用 terminate-instance-in-auto-scaling-group CLI 命令。这将终止指定实例,并可以选择调整组的所需容量。此外,如果该 Auto Scaling 组用于生命周期挂钩,您为实例终止指定的自定义操作将在实例完全终止之前运行。

  • 备用实例—在 Launch 暂停时,不能将 Standby 状态的实例恢复为运行。要将实例恢复运行,您必须首先恢复 Launch

暂停和恢复扩展进程(控制台)

您可以暂停和恢复单个流程或所有流程。

暂停和恢复进程

  1. 打开 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Auto Scaling 下,选择 Auto Scaling 组

  3. 选择 Auto Scaling 组。

  4. Details 选项卡上,选择 Edit

  5. 对于 Suspended Processes,选择要暂停的流程。

    
                            “Suspended Processes (暂停的进程)”列表。

    要恢复已暂停的流程,请从 Suspended Processes 中删除该流程。

    
                            “Suspended Processes (暂停的进程)”列表。
  6. 选择保存

暂停和恢复扩展 (AWS CLI)

您可以暂停和恢复单个流程或所有流程。

暂停一个流程

suspend-processes 命令与 --scaling-processes 选项一起使用,如下所示:

aws autoscaling suspend-processes --auto-scaling-group-name my-asg --scaling-processes AlarmNotification

暂停所有流程

按以下方式使用 suspend-processes 命令(省略 --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-processes AlarmNotification

恢复所有暂停的流程

按以下方式使用 resume-processes 命令(省略 --scaling-processes 选项):

aws autoscaling resume-processes --auto-scaling-group-name my-asg