Amazon EC2 Auto Scaling
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Auto Scaling 实例的运行状况检查

Auto Scaling 实例的运行状况有正常和不佳两种。Auto Scaling 组中所有实例在开始启动时都处于良好运行状态。除非 Amazon EC2 Auto Scaling 收到实例运行状况不佳的通知,否则将认为它们运行状况良好。此通知可能来自以下一个或多个来源:Amazon EC2、Elastic Load Balancing 或自定义运行状况检查。

Amazon EC2 Auto Scaling 在将一个实例标记为运行状况不佳后,会计划替换该实例。如果您不想替换实例,可以暂停任何单个 Auto Scaling 组的运行状况检查流程。

实例运行状况

Amazon EC2 Auto Scaling 可以使用下列一项或多项检查来确定实例的运行状况:

  • Amazon EC2 提供的用于识别可能影响实例的软硬件问题的状态检查。这包括实例状态检查和系统状态检查。有关更多信息,请参阅Amazon EC2 用户指南(适用于 Linux 实例)中的状态检查类型

  • 由 Elastic Load Balancing 提供的运行状况检查。

  • 您的自定义运行状况检查。

EC2 状态检查是 Amazon EC2 Auto Scaling 的默认运行状况检查,并且不需要任何特殊配置。不过,您可以通过指定其他检查自定义您的 Auto Scaling 组执行的默认运行状况检查。有关更多信息,请参阅 向 Auto Scaling 组添加 Elastic Load Balancing 运行状况检查自定义运行状况检查

确定实例运行状况

一个实例在经过完全配置并通过初始运行状况检查后,将被 Amazon EC2 Auto Scaling 视为正常并进入 InService 状态。Amazon EC2 Auto Scaling 定期对 Auto Scaling 组中的实例执行运行状况检查并标识所有运行状况不佳的实例。

Amazon EC2 Auto Scaling 运行状况检查使用 Amazon EC2 状态检查的结果确定实例的运行状况。如果实例状态是除 running 以外的其他任何状态,或者系统状态为 impaired,则 Amazon EC2 Auto Scaling 认为实例运行状况不佳并启动替换实例。这包括当实例为任何以下状态时:

  • stopping

  • stopped

  • terminating

  • terminated

如果将一个负载均衡器或目标组附加到 Auto Scaling 组,您可以对该组进行配置,以便在 Elastic Load Balancing 报告实例为 OutOfService 时将其标记为运行状况不佳。如果为负载均衡器启用了连接耗尽,则在由于扩展事件或运行状况检查替换而终止实例之前,Amazon EC2 Auto Scaling 会等待进行中的请求完成或等待最大超时过期(以先到者为准)。如果将 Auto Scaling 组配置为使用 Elastic Load Balancing 运行状况检查时,Amazon EC2 Auto Scaling 通过检查 EC2 状态检查和 Elastic Load Balancing 运行状况检查来确定实例的运行状况。有关更多信息,请参阅 向 Auto Scaling 组添加 Elastic Load Balancing 运行状况检查

如果您有自定义运行状况检查,则可以将运行状况检查的信息发送给 Amazon EC2 Auto Scaling,以便 Amazon EC2 Auto Scaling 能够利用此信息。例如,如果您确定实例未按预期运行,则可将实例的运行状况设置为 Unhealthy。Amazon EC2 Auto Scaling 下次对实例执行运行状况检查时,它将确定实例运行状况不佳,然后启动替换实例。

运行状况检查宽限期

通常,刚刚投入使用的 Auto Scaling 实例需要进行预热,然后才能通过运行状况检查。Amazon EC2 Auto Scaling 等到运行状况检查宽限期结束后才检查实例的运行状况。Amazon EC2 状态检查和 Elastic Load Balancing 运行状况检查可以在运行状况检查宽限期过期之前完成。但在运行状况检查宽限期过期后,Amazon EC2 Auto Scaling 才会执行这些检查。为了给实例提供足够的预热时间,请确保运行状况检查宽限期包含应用程序的预期启动时间。如果添加一个生命周期挂钩,在生命周期挂钩操作完成并且实例进入 InService 状态后,宽限期才会开始。

替换运行状况不佳的实例

在 Amazon EC2 或 Elastic Load Balancing 运行状况检查中将实例标记为运行状况不佳之后,将立即安排对它进行替换。它不会自动恢复良好的运行状况。您可以手动进行干预,方法是调用 SetInstanceHealth 操作(或 as-set-instance-health 命令)以将实例的运行状况重新设置为良好。但是如果该实例已终止,将导致错误。因为将实例标记为运行状况不佳和实际终止该实例之间的间隔非常短,尝试使用 SetInstanceHealth 操作(或 as-set-instance-health 命令)将该实例重新设置为良好运行状况可能仅适用于已暂停的组。有关更多信息,请参阅 暂停和恢复扩展流程

Amazon EC2 Auto Scaling 将创建用于终止运行状况不佳的实例的新扩展活动,然后终止该实例。随后,另一个扩展活动将启动新实例以替代终止的实例。

实例终止后,任何关联的弹性 IP 地址都会取消关联,并且不会自动与新实例关联。必须手动将这些弹性 IP 地址与新实例关联。同样,实例终止后,其附加的 EBS 卷也会分离。必须手动将这些 EBS 卷附加到新实例。有关更多信息,请参阅Amazon EC2 用户指南(适用于 Linux 实例)中的取消关联弹性 IP 地址并将它与其他实例重新关联将 Amazon EBS 卷附加到实例

自定义运行状况检查

如果您具有自己的运行状况检查系统,您可以将实例的运行状况信息从您的系统直接发送到 Amazon EC2 Auto Scaling。

可以使用以下 set-instance-health 命令将指定实例的运行状况设置为 Unhealthy

aws autoscaling set-instance-health --instance-id i-123abc45d --health-status Unhealthy

使用以下 describe-auto-scaling-groups 命令验证实例状态是否为 Unhealthy

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg

下面是一个示例响应,说明实例的运行状况为 Unhealthy 并且实例正在终止:

{ "AutoScalingGroups": [ { .... "Instances": [ { "InstanceId": "i-123abc45d", "AvailabilityZone": "us-west-2a", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating", "LaunchConfigurationName": "my-lc" }, ... ] } ] }