暂停和恢复 Auto Scaling 组的进程 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

暂停和恢复 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 实例运行状况不佳,则将对应实例标记为运行状况不佳。此流程可覆盖您手动设置的实例运行状况状态。有关更多信息,请参见 自动扩缩组中实例的运行状况检查

  • InstanceRefresh-使用实例刷新功能终止和替换实例。有关更多信息,请参阅 基于实例刷新替换 Auto Scaling 实例

  • ReplaceUnhealthy — 终止被标记为运行状况不佳的实例,然后创建新实例以替换它们。有关更多信息,请参见 自动扩缩组中实例的运行状况检查

  • ScheduledActions-执行您创建的计划扩展操作,或您在创建 Amazon Auto Scaling 扩展计划并启用预测扩展时创建的计划扩展操作。有关更多信息,请参见 Amazon EC2 Auto Scaling 的计划扩缩

注意事项

暂停进程之前,请注意以下事项:

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

  • 暂停进程将影响自动扩缩组中的所有实例。例如,您可以暂停 HealthCheckReplaceUnhealthy 进程以重启实例,但不让 Amazon EC2 Auto Scaling 根据运行状况检查的结果终止实例。如果需要 Amazon EC2 Auto Scaling 对剩余实例执行运行状况检查,则使用备用功能而不是暂停-恢复功能。有关更多信息,请参见 临时从 Auto Scaling 组中移除实例

  • 暂停AlarmNotification允许您暂时停止群组的目标跟踪、步骤和简单扩展策略,而无需删除扩展策略或其关联 CloudWatch 警报。要暂时停止单个扩缩策略,请参阅禁用 Auto Scaling 组的扩缩策略

  • 如果您暂停了 LaunchTerminate 进程或者 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 仅考虑其计划时间尚未过期的计划操作。

其它注意事项

此外,在暂停 LaunchTerminate 时,以下功能可能无法正常运行:

  • 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(附加和分离实例)– 暂停 LaunchTerminate 时,您可以分离附加到自动扩缩组的实例,但在暂停 Launch 期间,您无法将新实例附加到该组。

  • Standby instances(备用实例)– 暂停 LaunchTerminate 时,您可以将实例置于 Standby 状态,但在暂停 Launch 期间,您无法将处于 Standby 状态的实例重设为服务状态。

暂停进程

要暂停 Auto Scaling 组的进程,请使用以下方法之一:

Console
暂停一个流程
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选中 Auto Scaling 组旁边的复选框。

    这时将在页面底部打开一个拆分窗格。

  3. Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。

  4. 对于 Suspended processes(暂停的进程),选择要暂停的进程。

  5. 选择更新

Amazon CLI

使用下面的 suspend-processes 命令暂停单个进程。

aws autoscaling suspend-processes --auto-scaling-group-name my-asg --scaling-processes HealthCheck ReplaceUnhealthy

要暂停所有进程,请忽略 --scaling-processes 选项,如下所示。

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

恢复流程

要恢复 Auto Scaling 组暂停的进程,请使用以下方法之一:

Console
恢复一个暂停的流程
  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台,然后从导航窗格中选择 Auto Scaling Groups(Auto Scaling 组)。

  2. 选中 Auto Scaling 组旁边的复选框。

    这时将在页面底部打开一个拆分窗格。

  3. Details(详细信息)选项卡上,选择 Advanced configurations(高级配置)、Edit(编辑)。

  4. 对于 Suspended processes(已暂停的进程),移除该已暂停的进程。

  5. 选择更新

Amazon CLI

要恢复暂停的进程,请使用以下 r esume-processes 命令

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

要恢复所有已暂停的进程,请忽略 --scaling-processes 选项,如下所示。

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