如何对失败的 Classic Load Balancer 运行状况检查执行问题排查和修复?

上次更新日期:2018 年 6 月 8 日

Classic Load Balancer 后的一个或多个实例未通过运行状况检查。导致这种情况的原因有哪些?如何修复?

简短描述

Elastic Load Balancing (ELB) 支持 Application Load Balancer、Network Load Balancer 和 Classic Load Balancer。在 Classic Load Balancer 上运行的实例可能出于以下原因无法通过运行状况检查:

  • 负载均衡器与后端之间存在连接问题
  • 应用程序存在配置问题
  • 未收到后端对运行状况检查请求的“200 OK”响应
  • SSL 存在问题,导致 HTTPS 或 SSL 运行状况检查失败

解决方法

要排查和解决运行状况检查相关问题,请检查以下各项:

解决负载均衡器和后端之间的潜在连接问题

确保以下各项没有问题:

  • 后端允许运行状况检查流量。 要检查您的安全组规则,请参阅负载均衡器安全组的建议规则。要查看后端实例,请参阅 VPC 中的实例的安全组
  • 具有负载均衡器或后端的子网的网络访问控制列表 (ACL) 允许运行状况检查流量。 要检查具有负载均衡器和后端的子网的 ACL 规则,请参阅 VPC 中的负载均衡器的网络 ACL
  • 后端上的实例级或操作系统级防火墙允许运行状况检查流量。 确保后端上的实例级或操作系统级防火墙允许运行状况检查的进出流量。
  • 后端实例的资源未被过度使用。 确保内存和 CPU 利用率处于可接受范围内。如果您的内存或 CPU 利用率过高,请添加更多后端或将后端升级至更大的实例类型。
  • 所有其他资源均允许运行状况检查流量。 后端可能会将运行状况检查请求转发给其他资源。如果其他依赖项无法响应请求或响应时间过长,运行状况检查会超时并失败。确保其他资源可正常响应运行状况检查请求。

解决应用程序的潜在配置问题

  • 应用程序正在运行。 例如,如果您正在 Linux 实例上运行 Apache,请使用 sudo service httpd status 命令确认 Apache 正在运行。
  • 应用程序正在侦听运行状况检查端口。 要确认服务器处于正在侦听运行状况检查端口的状态,请在服务器上运行 netstat -ant 命令。检查应用程序配置端口,确认应用程序正在运行。要模拟负载均衡器与后端之间的 TCP 连接,请在实例上运行 telnet <backend private IP> <health-check port> 命令。 如果输出为“Connected”,说明后端正在侦听运行状况检查端口。
  • 应用程序已设置为响应具有自定义主机标头的请求。 对于 HTTP 和 HTTPS 运行状况检查,Classic Load Balancer 将标头设置为具有后端主网络接口的私有 IP 地址,并将用户代理设置为“ELB-HealthChecker/1.0”。如果后端仅响应具有自定义主机标头或用户代理的请求,则运行状况检查请求将失败。
  • 应用程序正在侦听后端的主网络接口。 Classic Load Balancer 连接到后端实例的主网络接口。确保应用程序正在侦听后端实例的主网络接口,并允许后端发送针对运行状况检查请求的响应。

确认后端对运行状况检查请求的“200 OK”响应

确保以下各项没有问题:

  • Ping 路径有效。 如果未在后端配置 Ping 路径中指定的文件,后端可能会返回“404 找不到”响应代码,且运行状况检查将失败。 注意:Ping 路径的默认值为 /index.html。如果您的后端没有 index.html 文件,请创建一个;或者将 Ping 路径的值更改为后端上的文件名。
  • 未在后端配置重定向。 在后端配置重定向可能会导致返回 301 或 302 响应代码,从而致使运行状况检查失败。例如,如果您在后端配置了从 HTTP:80 重定向至 HTTPS:443,则在端口 80 上执行的 HTTP 运行状况检查将失败,除非您将运行状况检查更改为 HTTPS 并将运行状况检查端口更改为 443。注意:您可以使用与负载均衡器关联的子网中的实例的 curl -Ivk http[s]://<private-IP-address-of-the-backend-instance>:<health-check-port>/<health-check-target-page> 命令模拟负载均衡器发送的运行状况检查请求。

解决任何 SSL 相关问题

确保以下各项没有问题:

  • 所有的协议与密码均匹配。 对于 HTTPS 或 SSL 运行状况检查,负载均衡器和后端应使用相同的协议和密码。在后端实例上执行的数据包捕获会在负载均衡器发送的 Client Hello 中显示负载均衡器上支持的密码和协议。已注册的后端实例应支持负载均衡器发送的一个或多个匹配密码和协议。
  • 后端服务器上未启用服务器名称指示 (SNI)。 如果运行状况检查为 HTTPS/SSL,且已在后端实例上启用 SNI,则负载均衡器和后端无法建立 SSL 握手。这是因为后端服务器在发送 Client Hello 后会发送 RST。禁用 SNI,或改用 TCP 运行状况检查。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?