如何对应用程序负载均衡器运行状况检查失败进行故障排除和修复?

2 分钟阅读
0

注册到应用程序负载均衡器的目标运行不正常。如何查明我的目标未通过运行状况检查的原因?

解决方法

要对应用程序负载均衡器运行状况检查失败进行故障排除和修复,请执行以下操作:

  1. 检查目标的运行状况,找到问题的原因代码和描述。
  2. 针对您收到的错误,请按照以下解决步骤进行操作。

Elb.InitialHealthChecking

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

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

Elb.RegistrationInProgress

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

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

Target.DeregistrationInProgress

描述: 目标注销正在进行中。

解决方法: 当您注销目标时,负载均衡器会等待,直到正在进行的请求完成。这就是所谓的注销延迟。默认情况下,弹性负载均衡会等待 300 秒才能完成注销过程。但是,您可以自定义此值。

如果正在注销的目标没有正在进行的请求,也没有活动连接,则弹性负载均衡会立即注销,无需等待注销延迟到期。正在注销的目标的初始状态为耗尽。注销延迟到期后,注销过程完成,目标的状态变为未使用。如果目标属于自动扩缩组,则可以将其终止或替换。

Target.FailedHealthChecks

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

解决方法:

  • 确认您的应用程序正在运行。使用 service 命令检查 Linux 目标上的服务状态。对于 Windows 目标,请查看 Windows 任务管理器的服务选项卡。如果服务已停止,请启动该服务。如果无法识别该服务,请验证所需的服务是否已安装。
  • 验证目标是否正在侦听运行状况检查端口上的流量。您可以在 Linux 目标上使用 ss 命令来验证您的服务器正在侦听哪些端口。对于 Windows 目标,您可以使用 netstat 命令。
  • 验证您的应用程序是否相应地响应了负载均衡器的运行状况检查请求。以下示例所示为一个来自应用程序负载均衡器的典型运行状况检查请求,您的目标必须以有效的 HTTP 响应对其做出回应。主机标头值包含目标的私有 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

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

解决方法: 如果目标是 Amazon Elastic Compute Cloud(Amazon 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 服务器(例如 NGINXIIS)都允许您记录服务器响应所需的时间。如果您的运行状况检查请求花费的时间超过了配置的超时时间,则可以:

如果无法连接:

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

相关信息

对应用程序负载均衡器进行故障排除

AWS 官方
AWS 官方已更新 1 年前