如何排查和修复失败的 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)支持记录服务器响应所需的时间。如果运行状况检查请求所需的时间长于配置的超时,则可以:

如果无法连接:


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?