关于自动扩缩组的运行状况检查 - Amazon EC2 Auto Scaling
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

关于自动扩缩组的运行状况检查

本主题概述了默认运行状况检查类型和可用运行状况检查类型,并介绍了它们的工作原理。

运行状况检查类型

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

运行状况检查类型 检查内容

Amazon EC2 状态检查和计划事件

  • 检查实例是否正在运行

  • 检查可能会影响实例的潜在硬件或软件问题

这是自动扩缩组的默认运行状况检查类型。

Elastic Load Balancing 运行状况检查

  • 检查负载均衡器是否将实例报告为运行正常,以确认实例是否可用于处理请求

要运行此运行状况检查类型,您必须为自动扩缩组启用此运行状况检查。

VPC Lattice 运行状况检查

  • 检查 VPC Lattice 是否将实例报告为运行正常,以确认实例是否可用于处理请求

要运行此运行状况检查类型,您必须为自动扩缩组启用此运行状况检查。

自定义运行状况检查

  • 根据自定义运行状况检查的结果,检查可能表明实例存在运行状况问题的其他问题。

Amazon EC2 运行状况检查

实例启动后,它会附加到自动扩缩组并进入 InService 状态。要详细了解 Auto Scaling 组中实例的不同生命周期状态,请参阅 Amazon EC2 Auto Scaling 实例生命周期

Amazon EC2 Auto Scaling 通过定期检查自动扩缩组中所有实例的运行状态,以确保所有实例都在运行并且运行正常。

状态检查

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

  • stopping

  • stopped

  • shutting-down

  • terminated

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

重要

Amazon EC2 Auto Scaling 会允许这些状态检查偶尔失败,而不执行任何操作。当状态检查失败时,Amazon EC2 Auto Scaling 会等待几分钟 Amazon 才能修复问题。它不会在状态检查的状态变为 impaired 时立即将实例标记为 Unhealthy

但如果 Amazon EC2 Auto Scaling 检测到实例不再处于 running 状态,这种情况将被视为立即失败。在这种情况下,它会立即将实例标记为 Unhealthy 并予以替换。

计划的事件

Amazon EC2 偶尔可以将实例上的事件安排在特定时间戳之后运行。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的实例的计划事件

如果其中一个实例受到计划事件的影响,则 Amazon EC2 Auto Scaling 会认为实例运行不正常并将其替换。在到达时间戳中指定的日期和时间之前,实例不会开始终止。

Elastic Load Balancing 运行状况检查

当您为自动扩缩组启用了 Elastic Load Balancing 运行状况检查时,Amazon EC2 Auto Scaling 还使用这些运行状况检查的结果来确定实例的运行状态。

您必须首先完成以下操作,然后才能为自动扩缩组启用 Elastic Load Balancing 运行状况检查:

  • 设置一个 Elastic Load Balancing 负载均衡器并为其配置运行状况检查,以便该负载均衡器用来确定实例是否运行正常。

  • 将负载均衡器附加到自动扩缩组

完成前提操作后,将会出现以下情况:

  • Amazon EC2 Auto Scaling 会将自动扩缩组中的实例注册到该负载均衡器。

  • 实例完成注册后,它会进入 InService 状态并可与该负载均衡器一起使用。

预设情况下,Amazon EC2 Auto Scaling 会忽略 Elastic Load Balancing 运行状况检查的结果。但是,您可以为自动扩缩组启用这些运行状况检查。完成此操作后,当 Elastic Load Balancing 报告某个注册的实例为 Unhealthy 时,Amazon EC2 Auto Scaling 会在下一次定期运行状况检查中将实例标记为 Unhealthy 并予以替换。

如果为负载均衡器启用了连接耗尽(注销延迟),则在终止运行不正常的实例之前,Amazon EC2 Auto Scaling 会等待进行中的请求完成或等待最大超时过期。

如需了解如何为自动扩缩组启用 Elastic Load Balancing 运行状况检查,请参阅将 Elastic Load Balancing 负载均衡器附加到您的 Auto Scaling 组

注意

当您为某个组启用 Elastic Load Balancing 运行状况检查时,Amazon EC2 Auto Scaling 可以替换 Elastic Load Balancing 将其报告为运行不正常的实例,但仅在负载均衡器处于 InService 状态后才会执行此操作。有关更多信息,请参阅 验证负载均衡器的附加状态

VPC Lattice 运行状况检查

预设情况下,Amazon EC2 Auto Scaling 会忽略 VPC Lattice 运行状况检查的结果。您可以选择为自动扩缩组启用这些运行状况检查。完成此操作后,当 VPC Lattice 报告某个注册的实例为 Unhealthy 时,Amazon EC2 Auto Scaling 会在下一次定期运行状况检查中将实例标记为 Unhealthy 并予以替换。注册实例然后检查其运行状况的过程与 Elastic Load Balancing 运行状况检查的过程相同。

要了解如何为自动扩缩组启用 VPC Lattice 运行状况检查,请参阅 将 VPC Lattice 目标组附加到您的自动扩缩组

注意

当您为某个组启用 VPC Lattice 运行状况检查时,Amazon EC2 Auto Scaling 可以替换 VPC Lattice 将其报告为运行不正常的实例,但仅在目标组处于 InService 状态后才会执行此操作。有关更多信息,请参阅 验证您的 VPC Lattice 目标组的附件状态

Amazon EC2 Auto Scaling 如何尽可能减少停机时间

预设情况下,因运行状况检查的结果而替换实例时,需要首先终止实例,这可能导致在新实例启动之前无法接受新请求。

如果 Amazon EC2 Auto Scaling 确定任何实例已停止运行(或已Unhealthy使用set-instance-health命令标记),它将立即替换这些实例。但如果发现其他实例运行不正常,Amazon EC2 Auto Scaling 将使用以下故障恢复方法。这种方法可尽可能减少可能因临时问题或运行状况检查配置错误导致的任何停机时间。

  • 如果正在进行某个扩缩活动并且您的自动扩缩组低于所需容量 10% 或以上,则 Amazon EC2 Auto Scaling 会首先等待进行中的扩缩活动完成,然后再替换运行不正常的实例。

  • 在进行横向扩展时,Amazon EC2 Auto Scaling 将首先等待实例通过初始运行状况检查。它还会等待默认实例预热完成,以确保新实例准备就绪。

  • 在实例完成预热并且该组升至所需容量的 90% 以上后,Amazon EC2 Auto Scaling 将替换运行不正常的实例,如下所示:

    • Amazon EC2 Auto Scaling 一次只替换该组所需容量的 10%。它将在所有运行不正常的实例都被替换之前持续这样操作。

    • 在替换实例时,它会等待新实例通过初始运行状况检查。它还会等待默认的实例预热期结束,然后再继续操作。

注意

如果某个自动扩缩组的容量非常小,以至于容量的 10% 小于 1,则 Amazon EC2 Auto Scaling 将改为一次替换一个运行不正常的实例。这可能会导致该组出现短暂停机。

此外,如果 Elastic Load Balancing 运行状况检查报告自动扩缩组中的所有实例都不正常,并且负载均衡器位于 InService 状态,则 Amazon EC2 Auto Scaling 可能会减少一次标记为运行不正常的实例数量。这可能会导致一次替换的实例数量少于在其他场景中执行的 10% 这一比例。从而您有时间来解决问题,无需 Amazon EC2 Auto Scaling 自动终止整个组。

运行状况检查注意事项

这一部分包含了有关 Amazon EC2 Auto Scaling 运行状况检查的注意事项。

  • 如果您需要在正在终止的实例上或正在启动的实例上执行某些操作,则可以使用生命周期钩子。借助这些钩子,您可以在 Amazon EC2 Auto Scaling 启动或终止实例时执行自定义操作。有关更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

  • Amazon EC2 Auto Scaling 没有提供从运行状况检查中移除 Amazon EC2 状态检查和计划事件的方法。如果您不想替换实例,则建议暂停任何单个 Auto Scaling 组的 ReplaceUnhealthyHealthCheck 进程。有关更多信息,请参阅 暂停和恢复 Amazon EC2 Auto Scaling 流程

  • 要手动将运行状况不佳的实例的健康状态设置回原为Healthy,您可以尝试使用set-instance-health命令。如果您收到错误消息,则可能是因为该实例已经开始终止。通常,只有在ReplaceUnhealthy进程或进程暂停的情况下,Healthy使用set-instance-health命令将实例的运行状况重新设置为才有用。Terminate

  • Amazon EC2 Auto Scaling 不会对处于 Standby 状态的实例执行运行状况检查。有关更多信息,请参阅 临时从 Auto Scaling 组中移除实例

  • 实例终止后,任何关联的弹性 IP 地址都会取消关联,并且不会自动与新实例关联。必须手动将弹性 IP 地址关联到新实例,或者使用基于生命周期挂钩的解决方案自动完成关联。有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的弹性 IP 地址

  • 同样,实例终止后,其挂载的 EBS 卷也将被分离(或删除,具体取决于卷的 DeleteOnTermination 属性)。必须手动将这些 EBS 卷挂载到新实例,或者使用基于生命周期挂钩的解决方案自行完成挂载。有关更多信息,请参阅《Amazon EBS 用户指南》中的将 Amazon EBS 卷挂载到实例

自定义运行状况检查

您也可以选择在自动扩缩组中的实例上运行自定义运行状况检测任务,如果任务失败,则将实例的运行状况设为运行Unhealthy。从而通过组合使用自定义运行状况检查、Amazon EC2 状态检查和 Elastic Load Balancing 运行状况检查(如果启用)来扩展运行状况检查的范围。

您可以使用 Amazon CLI 或 SDK 将实例运行状况信息直接发送到 Amazon EC2 Auto Scaling。以下示例说明如何使用配置实例的运行状况,然后验证实例的运行状况。 Amazon CLI

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

aws autoscaling set-instance-health --instance-id i-1234567890abcdef0 --health-status Unhealthy

默认情况下,此命令会执行运行状况检查宽限期。不过,您可以通过包括 --no-should-respect-grace-period 选项来覆盖此行为,不执行此宽限期。

使用以下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-1234567890abcdef0" }, "InstanceId": "i-1234567890abcdef0", "InstanceType": "t2.micro", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }

相关资源

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

Amazon EC2 Auto Scaling 还会使用 Amazon EC2、Amazon EBS 或自定义运行状况检查来监控您在暖池中启动的实例的运行状况。有关更多信息,请参阅 查看运行状况检查状态以及运行状况检查失败的原因