Auto Scaling 实例的运行 Health 况检查 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

Auto Scaling 实例的运行 Health 况检查

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

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

实例运行状况

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

  • Amazon EC2 提供的用于识别可能影响实例的硬件和软件问题的状态检查。Auto Scaling 组的默认运行状况检查只有 EC2 状态检查。

  • Elastic Load Balancing (ELB) 提供的运行 Health 况检查。这些运行状况检查默认为禁用状态,但可以启用。

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

确定实例运行状况

实例在经过完全配置并通过初始运行状况检查后,Amazon EC2 Auto Scaling 将其视为运行状况良好。Amazon EC2 Auto Scaling 通过定期检查实例的运行状况,确认 Auto Scaling 组中的所有实例正在运行且状态良好。如果它确定某个实例运行状况不佳,它将终止该实例,并启动新实例。这有助于保持定义的最小数量(或指定的所需数量)的运行实例。

Amazon EC2 状态检查

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

  • stopping

  • stopped

  • shutting-down

  • terminated

EC2 状态检查不需要任何特殊配置,并且始终处于启用状态。这包括实例状态检查和系统状态检查。有关更多信息,请参阅 。状态检查类型中的适用于 Linux 实例的 Amazon EC2 用于指南

Elastic Load Balancing (ELB) 运行 Health 况检查

不使用的组的实例ELB如果运行状况检查位于running状态。使用的组的实例ELB如果运行状况检查位于running状态,并且负载均衡器将其报告为运行状况良好。

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

自定义运行状况检查

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

运行 Health 检查宽限期

当实例启动时,Amazon EC2 Auto Scaling 会使用HealthCheckGracePeriod,以确定应等待多长时间之后再检查实例的运行状况。Amazon EC2 和 Elastic Load Balancing 运行状况检查可以在运行状况检查宽限期到期之前完成。但在运行状况检查宽限期过期后,Amazon EC2 Auto Scaling 才会执行这些检查。

默认情况下,运行状况检查宽限期是。300创建 Auto Scaling 组时,您可以从Amazon Web Services Management Console。其默认值是。0创建 Auto Scaling 组时,使用Amazon CLI或开发工具包。

为了给实例提供足够的预热时间,请确保运行状况检查宽限期包含应用程序的预期启动时间,即从实例开始运行到可以接收流量的时间。如果添加一个生命周期挂钩,在生命周期挂钩操作完成并且实例进入 InService 状态后,宽限期才会开始。

替换运行不正常的实例

当实例由于运行状况检查而被标记为运行状况不佳后,将立即安排替换该实例。它不会自动恢复良好的运行状况。您可以通过调用set-instance-health命令或SetInstanceHealth操作将实例的运行状况重新设置为良好运行状况。但是如果该实例已终止,将导致错误。

注意

由于将实例标记为运行状况不佳和实际终止该实例之间的间隔非常短,尝试使用set-instance-health命令或SetInstanceHealth操作可能只对挂起的组有用。有关更多信息,请参阅 暂停和恢复 Auto Scaling 组的流程

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

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

使用定制运行状况检查

如果您具有自己的 Amazon EC2 行状况检查系统,您可以使 Auto ScalingAmazon CLI或开发工具包。以下示例演示如何使用 Amazon CLI 配置实例的运行状况,然后验证实例的运行状况。

可以使用以下 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": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-050555ad16a3f9c7f" }, "InstanceId": "i-123abc45d", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }

另请参阅

有关运行状况检查的详细信息,请参阅 排查 Amazon EC2 Auto Scaling:运行状况检查。如果运行状况检查失败,请查看本主题以了解故障排除步骤。本主题将帮助您弄明白 Auto Scaling 组中发生了什么故障,并提供相关的修复建议。