本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
对经典负载均衡器进行故障排除:运行状况检查
负载均衡器使用 Elastic Load Balancing 提供的默认运行状况检查配置,或使用您指定的自定义运行状况检查配置来检查已注册实例的运行状况。运行状况检查配置包含协议、ping 端口、ping 路径、响应超时和运行状况检查间隔等信息。如果在运行状况检查间隔内返回 200 响应代码,则会将该实例视为运行状况良好。有关更多信息,请参阅 对您的 Classic Load Balancer 的实例进行运行状况检查。
如果您的部分或所有实例的当前状态为 OutOfService
,并且描述字段显示消息 Instance has failed at least
the Unhealthy Threshold number of health checks consecutively
,则表示实例未通过负载均衡器运行状况检查。下面是要查找的问题、潜在原因以及可以用于解决问题的步骤。
运行状况检查目标页面错误
问题:通过指定的 ping 端口和 ping 路径(例如,: 80/index.htmlHTTP)向实例发出的HTTPGET请求收到的响应码不是 200。
原因 1:未在该实例上配置目标页面。
解决方案 1:在每个注册的实例上创建目标页面 (例如 index.html
),并指定其路径作为 ping 路径。
原因 2:响应中的 Content-Length 标头值未设置。
解决方案 2:如果响应包含正文,请将 Content-Length 标头设置为大于等于零的值,或将 Transfer-Encoding 值设置为“chunked”。
原因 3:应用程序未配置为从负载均衡器接收请求或返回 200 响应代码。
解决方案 3:检查实例上的应用程序以调查原因。
与实例的连接超时
问题:从您的负载均衡器向您的EC2实例发出的运行状况检查请求已超时或间歇性失败。
首先,通过直接连接到实例验证问题。我们建议使用实例的私有 IP 地址从网络内连接到实例。
使用以下命令进行TCP连接:
telnet private-IP-address-of-the-instance
port
对HTTP或HTTPS连接使用以下命令:
curl –I private-IP-address-of-the-instance
:port
/health-check-target-page
如果您使用的是HTTP/HTTPS连接并且收到的响应不是 200,请参阅运行状况检查目标页面错误。如果能够直接连接到实例,请检查以下各项:
原因 1:实例未能在配置的响应超时期内响应。
解决方案 1:调整负载均衡器运行状况检查配置中的响应超时设置。
原因 2:实例承担大量负载,从而导致响应时间超出配置的响应超时期。
解决方案 2:
-
检查监控图表中是否存在过度使用情况。CPU有关信息,请参阅 Amazon EC2 用户指南中的获取特定EC2实例的统计数据。
通过连接到您的EC2实例,检查其他应用程序资源的利用率,例如内存或限制。
如果需要,请添加更多实例或启用 Auto Scaling。有关更多信息,请参阅 Amazon A EC2 uto Scaling 用户指南。
原因 3:如果您使用的是HTTP或HTTPS连接,并且正在对 ping 路径字段中指定的目标页面执行运行状况检查(例如,HTTP:80/index.html
),则目标页面的响应时间可能超过您配置的超时时间。
解决方案 3:使用更简单的运行状况检查目标页面或调整运行状况检查间隔设置。
公钥身份验证失败
问题:配置为使用HTTPS或SSL协议且启用后端身份验证的负载均衡器无法通过公钥身份验证。
原因:SSL证书上的公钥与负载均衡器上配置的公钥不匹配。请使用 s_client
命令查看证书链中的服务器证书的列表。有关更多信息,请参阅 Open SSL 文档中的 s_client
解决方案:您可能需要更新SSL证书。如果您的SSL证书是最新的,请尝试将其重新安装到您的负载均衡器上。有关更多信息,请参阅 替换 Classic Load Balancer 的SSL证书。
实例未从负载均衡器接收流量
问题:实例的安全组阻止来自负载均衡器的流量。
对实例执行数据包捕获以验证问题。使用以下 命令:
# tcpdump port health-check-port
原因 1:与实例关联的安全组不允许来自负载均衡器的流量。
解决方案 1:编辑实例安全组以允许来自负载均衡器的流量。添加规则以允许来自负载均衡器安全组的所有流量。
原因 2:您的负载均衡器的安全组不允许流量进入EC2实例。
解决方案 2:编辑负载均衡器的安全组以允许流量进入子网和EC2实例。
有关管理安全组的信息,请参阅 为经典负载均衡器配置安全组。
实例上的端口未打开
问题:负载均衡器发送到EC2实例的运行状况检查被端口或防火墙阻止。
请使用以下命令验证问题:
netstat –ant
原因:指定的运行状况端口或侦听器端口 (如果配置方式不同) 未打开。为运行状况检查指定的端口和侦听器端口必须都打开并正在进行侦听。
解决方案:在实例上打开侦听器端口和运行状况检查配置中指定的端口 (如果配置为不同端口) 以接收负载均衡器流量。
Auto Scaling 组中的实例未通过ELB运行状况检查
问题:您的 Auto Scaling 组中的实例通过了默认 Auto Scaling 运行状况检查,但未通过ELB运行状况检查。
原因:Auto Scaling 使用EC2状态检查来检测实例的硬件和软件问题,但负载均衡器通过向实例发送请求并等待 200 响应码或与实例建立TCP连接(用于TCP基于基础的运行状况检查)来执行运行状况检查。
实例可能无法通过运行ELB状况检查,因为在该实例上运行的应用程序存在问题,导致负载均衡器认为该实例已停止服务。此实例可能通过 Auto Scaling 运行状况检查;它不会被 Auto Scaling 策略所取代,因为根据EC2状态检查,它被视为运行正常。
解决方案:对您的 Auto Scaling 群组使用ELB运行状况检查。使用ELB运行状况检查时,Auto Scaling 会通过检查实例状态检查和运行状况检查的结果来确定实例的ELB运行状况。有关更多信息,请参阅 Amazon Auto Scaling 用户指南中的向 Aut EC2 o S caling 组添加运行状况检查。