

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

# 应用程序负载均衡器目标组的运行状况检查
<a name="target-group-health-checks"></a>

您的 Application Load Balancer 会定期向其注册目标发送请求以测试其状态。这些测试称为*运行状况检查*。

每个负载均衡器节点仅将请求路由至负载均衡器的已启用可用区中的正常目标。每个负载均衡器节点均使用每个目标注册到的目标组的运行状况检查设置来检查该目标的运行状况。在注册目标后，目标必须通过一次运行状况检查才会被视为正常。在完成每次运行状况检查后，负载均衡器节点将关闭为运行状况检查而建立的连接。

如果目标组仅包含运行状况不佳的注册目标，则负载均衡器将请求路由到所有这些目标，而不考虑这些目标的运行状况。这意味着，如果在所有已启用的可用区中，所有目标都未通过运行状况检查，则负载均衡器将在失败时开放。失败时开放的效果是根据负载均衡算法，允许传输到所有已启用的可用区中的所有目标的流量，而不考虑这些目标的运行状况。

不支持 Health 检查 WebSockets。

有关更多信息，请参阅 [目标组运行状况](load-balancer-target-groups.md#target-group-health)。

您可以使用运行状况检查日志来捕获有关对负载均衡器的注册目标进行的运行状况检查的详细信息，并将其作为日志文件存储在 Amazon S3 中。您可以使用这些运行状况检查日志来解决目标的问题。有关更多信息，请参阅 [Health 检查日志](load-balancer-health-check-logs.md)。

**Topics**
+ [运行状况检查设置](#health-check-settings)
+ [目标运行状况](#target-health-states)
+ [运行状况检查原因代码](#target-health-reason-codes)
+ [检查目标运行状况](check-target-health.md)
+ [更新运行状况检查设置](modify-health-check-settings.md)

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

如下表所述，您可以为目标组中的目标配置运行状况检查。表中使用的设置名称是 API 中使用的名称。负载均衡器使用指定的端口、协议和运行状况检查路径，每**HealthCheckIntervalSeconds**秒钟向每个注册目标发送一次运行状况检查请求。每个运行状况检查请求都是独立的，其结果在整个时间间隔内持续。目标响应所用时间不影响下一运行状况检查请求的时间间隔。如果运行状况检查超过**UnhealthyThresholdCount**连续失败次数，则负载均衡器会使目标停止服务。当运行状况检查超过**HealthyThresholdCount**连续成功率时，负载均衡器会将目标重新投入使用。

请注意，当您注销目标时，该值会减少**HealthyHostCount**但不会增加**UnhealthyHostCount**。


| 设置 | 说明 | 
| --- | --- | 
| **HealthCheckProtocol** | 对目标执行运行状况检查时负载均衡器使用的协议。对于应用程序负载均衡器，可能的协议是 HTTP 和 HTTPS。默认值为 HTTP 协议。<br />这些协议使用 HTTP GET 方法发送运行状况检查请求 | 
| **HealthCheckPort** | 对目标执行运行状况检查时负载均衡器使用的端口。默认设置是使用每个目标用来从负载均衡器接收流量的端口。 | 
| **HealthCheckPath** | 目标运行状况检查的目的地。<br />如果协议版本是 HTTP/1.1 或 HTTP/2，请指定有效的 URI (/*path*?*query*)。默认值为 /。<br />如果协议版本是 gRPC，请使用格式 `/package.service/method` 指定自定义运行状况检查方法的路径。默认为 `/AWS.ALB/healthcheck`。 | 
| **HealthCheckTimeoutSeconds** | 以秒为单位的时间长度，在此期间内，没有来自目标的响应意味着无法通过运行状况检查。范围为 2–120 秒。默认值为 5 秒（如果目标类型为 `instance` 或 `ip`）和 30 秒（如果目标类型为 `lambda`）。 | 
| **HealthCheckIntervalSeconds** | 各个目标的运行状况检查之间的大约时间量 (以秒为单位)。范围为 5–300 秒。默认值为 30 秒（如果目标类型为 `instance` 或 `ip`）和 35 秒（如果目标类型为 `lambda`）。 | 
| **HealthyThresholdCount** | 将不正常目标视为正常运行之前所需的连续运行状况检查成功次数。范围为 2–10。默认值为 5。 | 
| **UnhealthyThresholdCount** | 将目标视为不正常之前所需的连续运行状况检查失败次数。范围为 2–10。默认值为 2。 | 
| **Matcher** | 检查来自目标的成功响应时要使用的代码。这些代码在控制台中称为**成功代码**。<br />如果协议版本是 HTTP/1.1 或 HTTP/2，则可能的值在 200 到 499 之间。您可以指定多个值（例如，“200,202”）或一系列值（例如，“200-299”）。默认值为 200。<br />如果协议版本是 gRPC，则可能的值在 0 到 99 之间。您可以指定多个值（例如，“0,1”）或一系列值（例如，“0-5”）。默认值是 12。 | 

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

在负载均衡器向目标发送运行状况检查请求之前，您必须将目标注册到目标组，在侦听器规则中指定其目标组，并确保已为负载均衡器启用目标的可用区。目标必须先通过初始运行状况检查，然后才能接收来自负载均衡器的请求。在目标通过初始运行状况检查后，其状态为 `Healthy`。

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


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

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

如果目标的状态是 `Healthy` 以外的任何值，则 API 将返回问题的原因代码和描述，并且控制台将显示相同的描述。以 `Elb` 开头的原因代码源自负载均衡器端，以 `Target` 开头的原因代码源自目标端。有关运行状况检查失败的可能原因的更多信息，请参阅[故障排除](load-balancer-troubleshooting.md#target-not-inservice)。


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