我想对经典负载均衡器后面运行状况检查失败的实例进行故障排除。
解决方法
弹性负载均衡 (ELB) 支持应用程序负载均衡器、网络负载均衡器和经典负载均衡器。要排查经典负载均衡器运行状况检查失败的问题,您可以运行 AWSSupport-TroubleshootELBHealthChecks 运行手册。该运行手册可自动分析 Amazon CloudWatch 控制面板中的运行状况检查指标,并验证经典负载均衡器和目标之间的网络配置。对于由 AWS Systems Manager 管理的目标,该运行手册还提供高级诊断命令,并可选择将日志保留在 Amazon S3 中。此解决方案适用于实例目标类型。
由于以下原因,在经典负载均衡器上运行的实例可能无法通过运行状况检查:
负载均衡器和后端之间的连接问题
- 确保后端允许运行状况检查流量。要检查您的安全组规则,请参阅负载均衡器安全组的推荐规则。有关后端实例,请参阅虚拟私有云 (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 运行状况检查,经典负载均衡器会将标头设置为后端主网络接口的私有 IP 地址。并将用户代理设置为 ELB-HealthChecker/1.0。如果后端仅响应带有自定义主机标头或用户代理的请求,则运行状况检查请求将失败。
- 应用程序必须侦听后端的主网络接口。经典负载均衡器连接到后端实例的主网络接口。确保应用程序正在侦听后端实例的主网络接口。这样后端才能发送运行状况检查请求的响应。
后端未对运行状况检查请求做出 "200 OK" 响应
SSL 相关问题
- 所有协议和密码都必须匹配。对于 HTTPS 或 SSL 运行状况检查,负载均衡器和后端必须使用相同的协议和密码。在后端实例上捕获的数据包会显示负载均衡器支持的密码和协议。这可以在负载均衡器发送的 client hello 中找到。注册的后端实例必须支持负载均衡器发送的一个或多个匹配密码和协议。
- 负载均衡器在执行运行状况检查时不会发送服务器名称指示 (SNI) 标头。例如,运行状况检查为 HTTPS/SSL。如果将后端实例配置为根据特定的 SNI 信息响应 SSL 握手,则 SSL 握手将失败。这是因为服务器会在 client hello 之后发送 RST。请将后端服务器配置为无论 SNI 如何都做出响应。或者,您也可以改用 TCP 运行状况检查。
相关信息
经典负载均衡器的已注册实例