

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

# 网关负载均衡器目标组的运行状况检查
<a name="health-checks"></a>

您可以将目标注册到一个或多个目标组中。注册过程完成后，网关负载均衡器会立即开始将请求路由到新注册的目标。完成注册过程和开始运行状况检查可能需要几分钟时间。

网关负载均衡器会定期向每个已注册的目标发送请求以检查其状态。在完成每次运行状况检查后，网关负载均衡器将关闭为运行状况检查而建立的连接。

## 运行状况检查设置
<a name="health-check-settings"></a>

您可以使用以下设置为目标组中的目标配置主动运行状况检查。如果运行状况检查超过指定的**UnhealthyThresholdCount**连续失败次数，则 Gateway Load Balancer 会使目标停止服务。当运行状况检查超过指定的**HealthyThresholdCount**连续成功次数时，Gateway Load Balancer 会将目标重新投入使用。


| 设置 | 说明 | 
| --- | --- | 
| **HealthCheckProtocol** | 对目标执行运行状况检查时负载均衡器使用的协议。可能的协议有 HTTP、HTTPS 和 TCP。默认值为 TCP。 | 
| **HealthCheckPort** | 对目标执行运行状况检查时网关负载均衡器使用的端口。范围为 1 至 65535。默认值为 80。 | 
| **HealthCheckPath** | [HTTP/HTTPS 运行状况检查] 进行运行状况检查的目标上的目的地的运行状况检查路径。默认值为 /。 | 
| **HealthCheckTimeoutSeconds** | 以秒为单位的时间长度，在此期间内，没有来自目标的响应意味着无法通过运行状况检查。范围为 2 至 120。默认值为 5。 | 
| **HealthCheckIntervalSeconds** | 各个目标的运行状况检查之间的大约时间量 (以秒为单位)。范围为 5 至 300。默认值为 10 秒。此值必须大于或等于**HealthCheckTimeoutSeconds**。 网关负载均衡器的运行状况检查是分布式的，使用共识机制来确定目标运行状况。因此，预计目标设备将在配置的时间间隔内收到几次运行状况检查。  | 
| **HealthyThresholdCount** | 将不正常目标视为正常运行之前所需的连续运行状况检查成功次数。范围为 2 至 10。默认值为 5。 | 
| **UnhealthyThresholdCount** | 将目标视为不正常之前所需的连续运行状况检查失败次数。范围为 2 至 10。默认值为 2。 | 
| **Matcher** | [HTTP/HTTPS 运行状况检查] 检查来自目标的成功响应时使用的 HTTP 代码。该值必须为 200-399。 | 

## 目标运行状况
<a name="target-health-states"></a>

您必须首先将目标注册到目标组，在侦听器规则中指定其目标组，并确保已为网关负载均衡器启用目标所在的可用区，然后网关负载均衡器才会向目标发送运行状况检查请求。

下表描述已注册目标的正常状态的可能值。


| 值 | 说明 | 
| --- | --- | 
| `initial` | 网关负载均衡器正在注册目标或正在对目标执行初始运行状况检查。<br />相关原因代码：`Elb.RegistrationInProgress` \| `Elb.InitialHealthChecking` | 
| `healthy` | 目标正常。<br />相关原因代码：无 | 
| `unhealthy` | 目标未响应运行状况检查或未通过运行状况检查。<br />相关原因代码：`Target.FailedHealthChecks` | 
| `unused` | 目标未注册到目标组，侦听器规则中未使用目标组，或者目标在没有启用的可用区中，或者目标处于停止或终止状态。<br />相关原因代码：`Target.NotRegistered` \|`Target.NotInUse` \|`Target.InvalidState` \|`Target.IpUnusable`  | 
| `draining` | 目标正在取消注册，连接即将耗尽。<br />相关原因代码：`Target.DeregistrationInProgress` | 
| `unavailable` | 目标运行状况不可用。<br />相关原因代码：`Elb.InternalError` | 

## 运行状况检查原因代码
<a name="target-health-reason-codes"></a>

如果目标的状态是 `Healthy` 以外的任何值，则 API 将返回问题的原因代码和描述，并且控制台将显示相同的描述。以 `Elb` 开头的原因代码源自网关负载均衡器端，以 `Target` 开头的原因代码源自目标端。


| 原因代码 | 说明 | 
| --- | --- | 
| `Elb.InitialHealthChecking` | 正在进行初始运行状况检查 | 
| `Elb.InternalError` | 由于内部错误，运行状况检查失败 | 
| `Elb.RegistrationInProgress` | 目标注册正在进行中 | 
| `Target.DeregistrationInProgress` | 目标取消注册正在进行中 | 
| `Target.FailedHealthChecks` | 运行状况检查失败 | 
| `Target.InvalidState` | 目标处于停止状态<br />目标处于终止状态<br />目标处于终止或停止状态<br />目标处于无效状态 | 
| `Target.IpUnusable` | 该 IP 地址正被负载均衡器使用，因此无法用作目标 | 
| `Target.NotInUse` | 没有将目标组配置为接收来自网关负载均衡器的流量<br />目标位于尚未为网关负载均衡器启用的可用区 | 
| `Target.NotRegistered` | 目标未注册到目标组 | 

## 网关负载均衡器目标故障场景
<a name="failure-scenarios"></a>

**现有流量**：默认情况下，无论目标的运行状况和注册状态如何，除非流量超时或被重置，否则现有流量会流向同一个目标。这种方法有助于连接耗尽，并且可以容纳有时由于 CPU 使用率过高而无法响应运行状况检查的第三方防火墙。有关更多信息，请参阅 [目标失效转移](edit-target-group-attributes.md#target-failover)。

**新流量**：新流量将发送到运行正常的目标。在对流量做出负载均衡决策后，即使该目标运行不正常或其他目标变为运行正常，网关负载均衡器也会将流量发送到同一个目标。

当所有目标都运行不正常时，网关负载均衡器会随机选择一个目标，并在流量生命周期内将流量转发给该目标，直到该目标被重置或超时为止。由于流量被转发到运行不正常的目标，因此流量会被丢弃，直到该目标恢复正常为止。

**TLS 1.3**：如果目标组配置了 HTTPS 运行状况检查，则如果其注册目标仅支持 TLS 1.3，则无法通过运行状况检查。这些目标必须支持 TLS 的早期版本，例如 TLS 1.2。

**跨可用区负载均衡**：默认情况下，跨可用区负载均衡处于禁用状态。如果启用跨可用区负载均衡，则每个网关负载均衡器都能看到所有可用区中的所有目标，并且无论位于哪个可用区，这些目标都将受到同等对待。

可用区之间的负载均衡和运行状况检查决策始终是独立的。即使启用了跨可用区负载均衡，现有流量和新流量的行为也与上述相同。有关更多信息，请参阅 *Elastic Load Balancing 用户指南*中的[跨可用区负载均衡](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#cross-zone-load-balancing)。

## 检查目标的运行状况
<a name="check-target-health"></a>

您可以检查已注册到目标组的目标的运行状况。

**使用控制台检查目标的运行状况**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格上的**负载均衡**下，选择**目标组**。

1. 选择目标组的名称以打开其详细信息页面。

1. 在 **Targets (目标)** 选项卡上，**Status (状态)** 列指示每个目标的状态。

1. 如果目标状态是 `Healthy` 以外的任何值，则 **Status details (状态详细信息)** 列将包含更多信息。

**要检查目标的生命值，请使用 AWS CLI**  
使用 [describe-target-health](https://docs.aws.amazon.com/cli/latest/reference/elbv2/describe-target-health.html) 命令。此命令的输出包含目标运行状况。如果状态是 `Healthy` 以外的任何值，则它包括原因代码。

**接收有关运行状况不佳的目标的电子邮件通知**  
使用 CloudWatch 警报触发 Lambda 函数以发送有关不健康目标的详细信息。有关 step-by-step说明，请参阅以下博客文章：[识别负载均衡器的运行状况不佳的目标](https://aws.amazon.com/blogs/networking-and-content-delivery/identifying-unhealthy-targets-of-elastic-load-balancer/)。

## 修改运行状况检查设置
<a name="modify-health-check-settings"></a>

您可以修改目标组的部分运行状况检查设置。

**使用控制台修改目标组的运行状况检查设置**

1. 打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格上的**负载均衡**下，选择**目标组**。

1. 选择目标组的名称以打开其详细信息页面。

1. 在**组详细信息**选项卡的**运行状况检查设置**部分中，选择**编辑**。

1. 在 **Edit health check settings (编辑运行状况检查设置)** 页面上，根据需要修改设置，然后选择 **Save changes (保存更改)**。

**要修改目标群体的健康检查设置，请使用 AWS CLI**  
使用 [modify-target-group](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-target-group.html) 命令。