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

2 分钟阅读
0

我想了解为什么注册到我的应用程序负载均衡器的目标不正常。

解决方法

要解决应用程序负载均衡器运行状况检查失败的问题,请找到问题的原因代码和描述。然后,完成以下任务来解决您的问题。

查找问题的原因代码和描述

使用资源映射而不是目标组的控制台来查看负载均衡器的资源并识别不健康的目标。资源图在单个页面上显示应用程序负载均衡器的所有资源。

**注意:**如果应用程序负载均衡器的目标 HTTP 响应不是预期的响应,请检查您的应用程序的响应。确保应用程序向负载均衡器发送正确的响应。

根据原因代码解决问题

根据您找到的运行状况检查原因代码,完成以下任务以解决问题。

Elb.InitialHealthChecking

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

Elb.RegistrationInProgress

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

Target.DeregistrationInProgress

当您取消注册目标时,负载均衡器不再向该目标发送请求。弹性负载平衡会等待 300 秒才能完成注销。但是,您可以使用 Amazo EC2 控制台或 AWS 命令行界面(AWS CLI)来更新延迟值。有关更多信息,请参阅 Deregistration delay

**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 Troubleshoot AWS CLI errors。此外,确保您使用的是最新版本的 AWS CLI

Target.FailedHealthChecks

要解决此问题,请完成以下任务:

  • 确认您的应用程序正在运行。使用 service 命令检查 Linux 目标上的服务状态。对于 Windows 目标,请查看 Windows 任务管理器的服务选项卡。如果服务已停止,请启动该服务。如果无法识别该服务,请检查该服务是否已安装。

  • 验证目标是否正在侦听运行状况检查端口上的流量。您可以在 Linux 目标上运行 ss 命令来验证服务器正在监听的端口。对于 Windows 目标,您可以使用 netstat 命令。

  • 在与目标实例相同的 Amazon 虚拟私有云(VPC)中启动或使用现有实例。确保您可以访问此实例。或者,如果目标可以公开访问,则直接向目标的公有 IP 地址发送运行状况检查请求。

    运行以下 curl 命令:

    $curl -vkso /dev/null <HealthCheck_protocol>://<Target_IP>:<HealthCheck_port>/<HealthCheck_path>

    **注意:**使用此方法绕过应用程序负载均衡器并验证目标是否正确响应负载均衡器的运行状况检查请求。

  • 验证您的应用程序是否相应地响应了负载均衡器的运行状况检查请求。以下示例所示为一个来自应用程序负载均衡器的典型运行状况检查请求,您的目标必须以有效的 HTTP 响应对其做出回应。

    GET / HTTP/1.1Host: 10.0.0.1:80
    Connection: close
    User-Agent: ELB-HealthChecker/2.0
    Accept-Encoding: gzip, compressed

    **注意:**在上述示例中,主机标头值包含目标的私有 IP 地址,后跟运行状况检查端口。User-agent 设置为 ELB-HealthChecker/2.0。消息标头字段的行终止符是序列 CRLF,标头在第一个空行处终止,后跟 CRLF。您可能需要在 Web 服务器配置中添加默认虚拟主机以接收运行状况检查请求。

  • 如果您的目标连接了多个接口,请验证您的应用程序是否正在侦听正确的网络接口。有关更多信息,请参阅 Target type

  • 确认目标以弹性负载平衡安全策略中指定的格式提供服务器证书和密钥。此外,请检查目标是否支持匹配的密码和负载均衡器为建立 TLS 握手而提供的协议。

Target.InvalidState

如果目标是 Amazon EC2 实例,则使用 Amazon EC2 控制台来验证该实例是否正在运行。如果该实例未运行,则手动启动该实例

Target.IpUnusable

如果您的目标类型是 ip,那么不要选择负载均衡器已经在使用的 IP 地址。

Target.NotInUse

要解决此问题,请完成以下任务:

  • 检查目标组并验证其是否已配置为从负载均衡器接收流量。
  • 确保为负载均衡器开启了目标可用区。

Target.NotRegistered

验证目标是否已注册到目标组。

Target.ResponseCodeMismatch

要解决此问题,请完成以下任务:

  • 查看您的运行状况检查配置,以验证负载均衡器预期收到的成功代码。默认情况下,成功代码为 200,但您可以指定介于 200 和 499 之间的值。然后,检查您的 Web 服务器访问日志,查看是否返回了预期的成功代码。
  • 验证 ping 路径是否有效。请务必指定有效的 URI。默认值为 /。

要更改成功代码值或 ping 路径,请参阅 Modify the health check settings of a target group

Target.Timeout

如果可以连接,则在运行状况检查超时之前,目标页面可能会没有响应。大多数 Web 服务器(例如 NGINX 和 IIS)都允许您记录服务器响应所需的时间。有关更多信息,请参阅 NGINX 网站上的 Configuring logging和在 Microsoft 网站上的 Configure logging in IIS

如果您的运行状况检查请求花费的时间超过配置的超时时间,请完成以下任务:

如果您无法连接,请完成以下任务:

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

相关信息

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

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