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

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

暂停和恢复 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 流程

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

Amazon EC2 Auto Scaling 的其他流程类型与特定扩展功能相关:

  • AddToLoadBalancer-在实例启动时,将其添加到附加的负载均衡器目标组或 Classic Load Balancer。有关更多信息,请参阅 Elastic Load Balancing 和 Amazon EC2 Auto Scaling

  • AlarmNotification-接受来自与组扩展策略关联的 CloudWatch 警报的通知。有关更多信息,请参阅 Amazon EC2 Auto Scaling 的动态扩展

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

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

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

  • ReplaceUnhealthy-终止被标记为运行状况不佳的实例,然后创建新实例以替换它们。有关更多信息,请参阅 Auto Scaling 实例的运行 Health 况检查

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

选择暂停

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

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

警告

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

Terminate

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

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

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

    • InstanceRefresh将暂停,直到您恢复Terminate.

Launch

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

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

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

  • InstanceRefresh将暂停,直到您恢复Launch.

AddToLoadBalancer

  • Amazon EC2 Auto Scaling 会启动实例,但不会将其添加到负载均衡器目标组或 Classic Load Balancer。当您恢复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 暂停时,某些外部操作可能会受影响。

  • 最大实例生命周期— 当Launch或者Terminate,则最大实例生命周期功能不能替换任何实例。

  • 竞价型实例中断— 如果Terminate已暂停并且 Auto Scaling 组具有竞价型实例,但它们仍会在竞价容量不再可用的情况下终止它们。WHERELaunch,则 Amazon EC2 Auto Scaling 无法从另一个 Scaling 实例池中启动替换实例,或者在其恢复可用后也无法从同一个 Spot 实例池中启动。

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

    注意

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

  • 备用实例— WHERELaunch被暂停,则不能在Standby状态到服务。要将实例恢复运行,您必须首先恢复 Launch

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

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

暂停和恢复进程

  1. 以下网址打开 Amazon EC2 Auto Scaling 控制台:https://console.aws.amazon.com/ec2autoscaling/.

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

    将在 Auto Scaling groups (Auto Scaling 组) 页面底部打开一个拆分窗格,其中显示有关所选组的信息。

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

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

    要恢复已暂停的进程,请从 Suspended processes (暂停的进程) 中删除该进程。

  5. 选择 Update

暂停和恢复进程 (Amazon CLI)

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

暂停一个流程

使用暂停进程命令--scaling-processes选项,如下所示。

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

暂停所有流程

使用暂停进程命令(省略--scaling-processes选项)。

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

恢复一个暂停的流程

使用恢复过程命令如下所示。

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

恢复所有暂停的流程

使用恢复过程命令(省略--scaling-processes选项)。

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