

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

# 关于自动扩缩组的运行状况检查
<a name="health-checks-overview"></a>

本主题概述了可用的运行状况检查类型，并描述了将 Amazon EC2 Auto Scaling 运行状况检查与您的应用程序集成的关键注意事项。

**Topics**
+ [运行状况检查类型](#available-health-checks)
+ [Amazon EC2 运行状况检查](#instance-health-detection)
+ [Elastic Load Balancing 运行](#elastic-load-balancing-health-checks)
+ [VPC Lattice 运行状况检查](#vpc-lattice-health-checks)
+ [Amazon EC2 Auto Scaling 如何尽可能减少停机时间](#minimize-downtime)
+ [暖池中实例的运行状况检查](#health-checks-for-instance-in-a-warm-pool)
+ [运行状况检查注意事项](#health-check-considerations)

## 运行状况检查类型
<a name="available-health-checks"></a>

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


****  

| 运行状况检查类型 | 检查内容 | 
| --- | --- | 
| Amazon EC2 状态检查和计划事件 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/health-checks-overview.html)这是自动扩缩组的默认运行状况检查类型。 | 
| Elastic Load Balancing 运行 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/health-checks-overview.html)要运行此运行状况检查类型，您必须为自动扩缩组开启此运行状况检查。 | 
| VPC 莱迪思健康检查 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/health-checks-overview.html)要运行此运行状况检查类型，您必须为自动扩缩组开启此运行状况检查。 | 
| 亚马逊 EBS 健康检查 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/health-checks-overview.html)要运行此运行状况检查类型，您必须为自动扩缩组开启此运行状况检查。 | 
| 自定义运行状况检查 |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/autoscaling/ec2/userguide/health-checks-overview.html)  | 

## Amazon EC2 运行状况检查
<a name="instance-health-detection"></a>

实例启动后，它会附加到自动扩缩组并进入 `InService` 状态。要详细了解 Auto Scaling 组中实例的不同生命周期状态，请参阅 [Amazon EC2 Auto Scaling 实例生命周期](ec2-auto-scaling-lifecycle.md)。

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 状态检查不需要任何特殊配置，并且始终处于启用状态。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[状态检查类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html#types-of-instance-status-checks)。

**重要**  
Amazon EC2 Auto Scaling 会允许这些状态检查偶尔失败，而不执行任何操作。当状态检查失败时，Amazon EC2 Auto Scaling 会等待几分钟 AWS 才能修复问题。它不会在状态检查的状态变为 `impaired` 时立即将实例标记为 `Unhealthy`。此外，如果状态检查返回 `insufficient-data`，EC2 Auto Scaling 不会将实例标记为 `Unhealthy`。  
但如果 Amazon EC2 Auto Scaling 检测到实例不再处于 `running` 状态，这种情况将被视为立即失败。在这种情况下，它会立即将实例标记为 `Unhealthy` 并予以替换。

**计划的事件**  
Amazon EC2 偶尔可以将实例上的事件安排在特定时间戳之后运行。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[实例的计划事件](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-instances-status-check_sched.html)。

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

## Elastic Load Balancing 运行
<a name="elastic-load-balancing-health-checks"></a>

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

您必须先配置一个 Elastic Load Balancing 负载均衡器并为其配置运行状况检查以确定实例是否运行正常，然后才能为自动扩缩组开启 Elastic Load Balancing 运行状况检查。有关更多信息，请参阅 [准备附加 Elastic Load Balancing 负载均衡器](getting-started-elastic-load-balancing.md)。

将负载均衡器附加到您的自动扩缩组后，会发生以下情况：
+ 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 负载均衡器附加到自动扩缩组](attach-load-balancer-asg.md)。  
当您为某个组开启 Elastic Load Balancing 运行状况检查时，Amazon EC2 Auto Scaling 可以替换 Elastic Load Balancing 将其报告为运行状况不佳的实例，但仅在负载均衡器处于 `InService` 状态后才会执行此操作。有关更多信息，请参阅 [验证负载均衡器的附加状态](load-balancer-status.md)。

## VPC Lattice 运行状况检查
<a name="vpc-lattice-health-checks"></a>

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

**注意**  
有关如何附加 VPC Lattice 目标组以及如何为自动扩缩组开启 VPC Lattice 运行状况检查的说明，请参阅[将 VPC Lattice 目标组附加到您的自动扩缩组](attach-vpc-lattice-target-group-asg.md)。  
当您为某个组开启 VPC Lattice 运行状况检查时，Amazon EC2 Auto Scaling 可以替换 VPC Lattice 将其报告为运行状况不佳的实例，但仅在目标组处于 `InService` 状态后才会执行此操作。有关更多信息，请参阅 [验证您的 VPC Lattice 目标组的附件状态](verify-target-group-attachment-status.md)。

## Amazon EC2 Auto Scaling 如何尽可能减少停机时间
<a name="minimize-downtime"></a>

默认情况下，在终止现有实例的同时会预置新实例，这可能导致在新实例完全运行之前无法接受新请求。

如果 Amazon EC2 Auto Scaling 确定任何实例已停止运行（或者它们已`Unhealthy`用[set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html)命令标记），它会立即替换它们。但如果发现其他实例运行不正常，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 将改为一次替换一个运行状况不佳的实例。这可能会导致该组出现短暂停机。
您可以通过[设置实例维护策略](https://docs.aws.amazon.com//autoscaling/ec2/userguide/set-instance-maintenance-policy-on-group.html)来修改 Auto Scaling 替换运行状况不佳实例的阈值，从而修改默认的 10% 值。但是，Auto Scaling 可能仍会限制其将实例标记为运行状况不佳的阈值。  
例如，如果 Elastic Load Balancing 运行状况检查报告自动扩缩组中的所有实例都不正常，并且负载均衡器位于 `InService` 状态，则 Amazon EC2 Auto Scaling 可能会减少一次标记为运行不正常的实例数量。这可能会导致一次替换的实例数量少于在其他场景中执行的 10% 这一比例。从而为您提供时间来解决问题，无需 Amazon EC2 Auto Scaling 自动终止整个组。

## 暖池中实例的运行状况检查
<a name="health-checks-for-instance-in-a-warm-pool"></a>

Amazon EC2 Auto Scaling 还会对暖池中的实例进行运行状况检查。有关更多信息，请参阅 [查看运行状况检查状态以及运行状况检查失败的原因](warm-pools-health-checks-monitor-view-status.md)。

## 运行状况检查注意事项
<a name="health-check-considerations"></a>

以下是使用 Amazon EC2 Auto Scaling 运行状况检查时的注意事项。
+ 如果您需要在正在终止的实例上或正在启动的实例上执行某些操作，则可以使用生命周期钩子。借助这些钩子，您可以在 Amazon EC2 Auto Scaling 启动或终止实例时执行自定义操作。有关更多信息，请参阅 [Amazon EC2 Auto Scaling 生命周期钩子](lifecycle-hooks.md)。
+ Amazon EC2 Auto Scaling 没有提供从运行状况检查中移除 Amazon EC2 状态检查和计划事件的方法。如果您不想替换实例，则建议暂停任何单个 Auto Scaling 组的 `ReplaceUnhealthy` 和 `HealthCheck` 进程。有关更多信息，请参阅 [暂停和恢复 Amazon EC2 Auto Scaling 进程](as-suspend-resume-processes.md)。
+ 要手动将运行状况不佳的实例的健康状态设置回原为`Healthy`，您可以尝试使用[set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html)命令。如果您收到错误消息，则可能是因为该实例已经开始终止。通常，只有在`ReplaceUnhealthy`进程或进程暂停的情况下，`Healthy`使用[set-instance-health](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/autoscaling/set-instance-health.html)命令将实例的运行状况重新设置为才有用。`Terminate`
+ 如果您需要在不受运行状况检查干扰的情况下对实例进行问题排查，则可以将该实例置于 `Standby` 状态。Amazon EC2 Auto Scaling 不会对处于 `Standby` 状态的实例执行运行状况检查，直到您将该实例恢复运行。有关更多信息，请参阅 [临时从 Auto Scaling 组中移除实例](as-enter-exit-standby.md)。
+ 实例终止后，任何关联的弹性 IP 地址都会取消关联，并且不会自动与新实例关联。必须手动将弹性 IP 地址关联到新实例，或者使用基于生命周期挂钩的解决方案自动完成关联。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[弹性 IP 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)。
+ 同样，实例终止后，其挂载的 EBS 卷也将被分离（或删除，具体取决于卷的 `DeleteOnTermination` 属性）。必须手动将这些 EBS 卷挂载到新实例，或者使用基于生命周期挂钩的解决方案自行完成挂载。有关更多信息，请参阅《Amazon EBS 用户指南》**中的[将 Amazon EBS 卷挂载到实例](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-attaching-volume.html)。