如何排查和修复失败的 Application Load Balancer 运行状况检查?

上次更新时间:2020 年 1 月 15 日

注册到 Application Load Balancer 的目标运行不正常。如何查明我的目标未通过运行状况检查的原因?

解决方法

要排查和修复失败的 Application Load Balancer 运行状况检查,请执行以下操作:

1.检查目标的运行状况以查找问题的原因代码和描述。

2.按照以下解决步骤解决收到的错误。

Elb.InitialHealthChecking

描述:正在进行初始运行状况检查。

解决方法:目标必须通过初始运行状况检查,才会收到负载均衡器发出的请求。等待您的目标通过初始运行状况检查,然后重新检查其运行状况。

Elb.RegistrationInProgress

描述:正在进行目标注册。

解决方法:在注册过程完成且目标通过初始运行状况检查后,负载均衡器会开始将请求路由到目标。

Target.DeregistrationInProgress

描述:正在取消注册目标。

解决方法:取消注册目标时,负载均衡器会一直等到执行中的请求完成。这就是所谓的取消注册延迟。默认情况下,Elastic Load Balancing 会在完成取消注册过程之前等待 300 秒。但是,您可以自定义此值。

如果正在取消注册的目标没有进行中的请求且没有活动连接,则 Elastic Load Balancing 会立即取消注册,而不会等待取消注册延迟结束。正在取消注册的目标的初始状态为耗尽。取消注册延迟结束后,取消注册过程完成,目标状态变为未使用。如果目标属于 Auto Scaling 组,则可以将其终止或替换。

Target.FailedHealthChecks

描述:负载均衡器在建立与目标的连接时收到错误,或目标响应的格式不正确。

解决方法:

验证您的应用程序是否正在运行。使用service命令检查 Linux 目标上的服务状态。对于 Windows 目标,检查 Windows 任务管理器的服务选项卡。如果服务停止,请启动服务。如果无法识别服务,请验证是否安装了所需服务。 验证目标是否正在侦听运行状况检查端口上的流量。您可以在 Linux 目标上使用ss 命令验证服务器正在侦听的端口。对于 Windows 目标,您可以使用 netstat命令。
验证应用程序是否相应地对负载均衡器的运行状况检查请求做出响应。以下示例显示了一个 Application Load Balancer 发出的典型运行状况检查请求,您的目标必须以有效的 HTTP 响应对其做出回应。Host标头值包含目标的私有 IP 地址,后跟运行状况检查端口。User-agent设置为ELB-HealthChecker/2.0。消息标头字段的行终止符是序列 CRLF,标头在第一个后跟 CRLF 的空行处终止。如有必要,请将默认虚拟主机添加到您的 Web 服务器配置中,以接收运行状况检查请求。
GET / HTTP/1.1
Host: 10.0.0.1:80
Connection: close
User-Agent: ELB-HealthChecker/2.0
Accept-Encoding: gzip, compressed
目标组的目标类型可确定负载均衡器将运行状况检查发送到目标上的哪个网络接口。例如,您可以注册实例 ID、IP 地址和 Lambda 函数。如果目标类型为实例 ID,则负载均衡器会将运行状况检查请求发送到目标的主网络接口。如果目标类型为 IP 地址,则负载均衡器会将运行状况检查请求发送到与相应 IP 地址关联的网络接口。如果您的目标连接多个接口,则验证您的应用程序是否正在侦听正确的网络接口。 使用 ELBSecurityPolicy-2016-08 安全策略进行目标连接和 HTTPS 运行状况检查。验证目标是否以安全策略中指定的格式提供服务器证书和密钥。此外,还要验证目标是否支持一个或多个匹配的密码和负载均衡器提供的协议,以建立 TLS 握手。

Target.InvalidState

描述:目标处于已停止或已终止状态。

解决方法:如果目标是 EC2 实例,请打开 Amazon EC2 控制台,然后验证该实例是否正在运行。如有必要,请启动实例。

Target.IpUnusable

描述:IP 地址不能用作目标,因为它由负载均衡器使用。

解决方法:创建目标组时,应指定其目标类型。当目标类型为 IP 时,请勿选择已由负载均衡器使用的 IP 地址。

Target.NotInUse

描述:任何负载均衡器都未使用目标组,或者目标位于没有为其负载均衡器启用的可用区中。

解决方法:

检查目标组,并验证它是否配置为接收来自负载均衡器的流量。 验证是否已为负载均衡器启用目标的可用区。

Target.NotRegistered

描述:目标未注册到目标组。

解决方法:验证目标是否已注册到目标组。

Target.ResponseCodeMismatch

描述:运行状况检查未返回预期的 HTTP 代码。

解决方法:

成功代码是检查来自目标的成功响应时使用的 HTTP 代码。您可以指定 200 到 499 之间的值或值范围。默认值为 200。检查您的负载均衡器运行状况检查配置以验证应收到的成功代码。然后,检查您的 Web 服务器访问日志以查看是否返回了预期的成功代码。如有必要,请修改成功代码值。 验证 ping 路径是否有效。ping 路径是目标上运行状况检查的目的地。请务必指定有效的 URI (/path?query)。默认值为 /。如有必要,请修改 ping 路径值。

Target.Timeout

描述:请求超时。

解决方法:如果可以连接,则在运行状况检查超时之前,目标页面可能会没有响应。大多数 Web 服务器(如 nginx和 IIS)支持记录服务器响应所需的时间。如果运行状况检查请求所需的时间长于配置的超时,则可以:

选择一个更简单的目标页面进行运行状况检查。 调整运行状况检查设置。

如果无法连接:

验证与目标关联的安全组是否允许使用运行状况检查端口和运行状况检查协议的负载均衡器出站流量。您可以向安全组添加规则以允许从负载均衡器安全组传出的所有流量。此外,负载均衡器的安全组也必须允许传入目标的流量。 验证与目标子网关联的网络 ACL 是否允许运行状况检查端口上的入站流量。验证它是否还允许临时端口 (1024-65535) 上的出站流量。 验证与负载均衡器节点子网关联的网络 ACL 是否允许临时端口上的入站流量。验证它是否还允许运行状况检查端口和临时端口上的出站流量。 验证目标上的任何操作系统级防火墙是否允许运行状况检查的进出流量。 验证与目标关联的子网的路由表是否包含允许运行状况检查流量返回到负载均衡器的条目。 验证目标的内存和 CPU 利用率是否处于可接受范围内。如果您的内存或 CPU 利用率过高,请添加其他目标或增加 Auto Scaling 组的容量。如果您的目标是 EC2 实例,您还可以将实例升级到更大的实例类型。