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

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

运行状况检查 Auto Scaling 实例

健康状况 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) 提供的运行状况检查。这些运行状况检查默认为禁用状态,但可以启用。

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

确定实例运行状况

在实例完全配置并通过初始运行状况检查后,将其视为健康 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

  • terminating

  • terminated

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

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

不使用组的实例 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 对实例执行运行状况检查,它将确定实例是不良的,然后启动更换实例。有关更多信息,请参阅 使用自定义运行状况检查.

运行状况检查宽限期

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

默认情况下,运行状况检查宽限期为 300 当您创建 Auto Scaling 组来自 AWS 管理控制台. 其默认值为 0 当您创建 Auto Scaling 使用 AWS CLI 或AWSSDK。

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

更换不健康的实例

由于运行状况检查结果显示,实例已经标记为不健康,因此几乎立即计划进行更换。它不会自动恢复良好的运行状况。您可以通过调用 set-instance-health 命令或 SetInstanceHealth 操作将实例的健康状态设置为“Healthy”。但是如果该实例已终止,将导致错误。

注意

由于标记实例不健康和其实际终止之间的间隔很小,试图将实例的健康状态设置为健康状态 set-instance-health 命令或 SetInstanceHealth 操作可能仅对暂停组有效。有关更多信息,请参阅 暂停和恢复扩展过程.

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

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

使用自定义运行状况检查

如果您拥有自己的运行状况检查系统,可以直接从系统发送实例的健康信息 Amazon EC2 Auto Scaling 使用 AWS CLI 或AWSSDK。以下示例演示如何使用 AWS 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" }, ... ] } ] }