健康检查异常排查(共享型)
问题描述
客户端的请求通过负载均衡器的监听器访问后端服务器异常,监听器的健康检查列显示“异常”。
当健康检查探测到您的后端服务器异常时,ELB将不再向异常的后端服务器转发流量。直到健康检查检测到后端服务器恢复正常时,ELB才会向此服务器继续转发流量。
背景介绍
负载均衡器通过向后端服务器发起心跳检查的方式来实现健康检查功能,并判断后端服务器是否可用。更多检查原理详见健康检查介绍。
- 当健康检查关闭时,ELB默认后端服务器正常在线,会将请求转发至后端服务器。
- 当后端服务器的权重设置为0时:
- 独享型负载均衡器:新的请求不会转发到该后端服务器,健康检查会继续探测,健康检查状态显示为实际结果。
- 共享型负载均衡器:新的请求不会再转发到该后端服务器,健康检查状态显示为“异常”。
排查思路
负载均衡已提供自助问题诊断工具帮助用户定位健康检查异常问题,如果通过自助诊断工具排查仍然无法定位问题,请参考表1进一步排查。
因为健康检查包含检查间隔和阈值判断,相关配置的修改完成后需要等待一定的时间,配置才会生效。
如果健康检查恢复正常,在ELB关联的后端服务器基本信息界面可以看到健康检查状态是否正常。
后端服务器的安全组配置
共享型负载均衡的后端服务器安全组规则必须放通ELB用于健康检查的协议和端口和健康检查的源地址。
健康检查的协议和端口为用户在健康检查配置页面进行设置,您可在后端服务器组的基本信息页面查看。共享型负载均衡用于健康检查的源地址为100.125.0.0/16网段的IP。
您可通过自助诊断工具后端服务器的安全组规则进行诊断。后端服务器安全组规则的检查项目如下表2所示。
排查项 |
处理措施 |
---|---|
健康检查入方向源地址检查 |
请确保后端服务器的安全组入方向规则放通健康检查协议对应的传输层协议、健康检查端口和100.125.0.0/16网段的IP。 配置指导详情见配置后端服务器的安全组(共享型)。 |
健康检查入方向端口检查 |
|
健康检查入方向协议检查 |
|
健康检查出方向源地址检查 |
默认的安全组出方向规则全部放通。如果您设置了出方向规则,请确保后端服务器的安全组出方向规则放通健康检查协议对应的传输层协议、健康检查端口和100.125.0.0/16网段的IP。 配置指导详情见配置后端服务器的安全组(共享型)。 |
健康检查出方向端口检查 |
|
健康检查出方向协议检查 |
若共享型ELB实例开启“获取客户端IP”功能,共享型ELB四层监听器转发的流量将不受安全组规则和网络ACL限制,安全组规则和网络ACL规则均无需额外放通。建议您使用监听器的访问控制功能对访问IP进行限制,详情请参考访问控制策略。
后端服务器子网的网络ACL配置
网络ACL为子网级别的可选安全层,若后端服务器的子网关联了网络ACL规则,网络ACL规则必须放通ELB用于健康检查的协议和端口和健康检查的源地址。
网络ACL默认规则会拒绝所有入站和出站流量,启用网络ACL后,您必须对网络ACL规则进行配置。
您可通过自助诊断工具后端服务器的安全组规则进行诊断。后端服务器的网络ACL规则的检查项目如下表3所示。
排查项 |
处理措施 |
---|---|
健康检查入方向协议检查 |
请确保后端服务器子网的网络ACL入方向规则放通健康检查协议对应的传输层协议、健康检查端口和100.125.0.0/16网段的IP。 配置指导详情见配置网络ACL规则(共享型)。 |
健康检查入方向源地址检查 |
|
健康检查入方向源端口检查 |
|
健康检查入方向目的地址检查 |
|
健康检查入方向目的端口检查 |
|
健康检查出方向协议检查 |
请确保后端服务器子网的网络ACL出方向规则放通健康检查协议对应的传输层协议、健康检查端口和100.125.0.0/16网段的IP。 配置指导详情见配置网络ACL规则(共享型)。 |
健康检查出方向源地址检查 |
|
健康检查出方向源端口检查 |
|
健康检查出方向目的地址检查 |
|
健康检查出方向目的端口检查 |
若共享型ELB实例开启“获取客户端IP”功能,共享型ELB四层监听器转发的流量将不受安全组规则和网络ACL限制,安全组规则和网络ACL规则均无需额外放通。建议您使用监听器的访问控制功能对访问IP进行限制,详情请参考访问控制策略。
健康检查参数配置
- 在左侧导航栏,选择“ 弹性负载均衡 > 后端服务器组”。
- 在后端服务器组页面,单击需要检查健康检查参数配置的后端服务器组名称。
- 在后端服务器组的“基本信息”页签下,查看以下健康检查配置参数。
更多健康检查参数设置信息,请参见修改健康检查配置。
表4 健康检查配置参数 健康检查参数
说明
域名
健康检查使用HTTP协议时,如果后端服务器设置了校验HOST头能力,需要将后端服务器配置的域名填写到“健康检查配置”页面中的“域名”处。
协议
后端服务器的安全组和网络ACL规则必须放通健康检查协议对应的传输层协议。
端口
建议指定后端服务器的业务端口为健康检查端口,配置详情请参见修改健康检查配置。
检查路径
如果是使用HTTP健康检查需要查看此参数,建议配置简单的静态HTML文件。
- 您的健康检查协议为“HTTP”,健康检查异常时,如果您已确认端口没有问题,请修改检查路径或者将健康检查协议修改为“TCP”,只检查端口。
- 检查路径需填写绝对路径。示例如下:
- 访问链接为:http://www.example.com或http://192.168.63.187:9096,则检查路径填写“/”。
- 访问链接为:http://www.example.com/chat/try/,则检查路径填写“/chat/try/”。
- 访问链接为:http://192.168.63.187:9096/chat/index.html,则检查路径填写“/chat/index.html”。
检查ELB是否绑定EIP或私网IP
- 该检查项仅适用于四层监听器(TCP/UDP)。
对于四层监听器(TCP/UDP)下的异常后端服务器,请检查其关联的负载均衡器是否绑定EIP或私网IP。
负载均衡实例初次创建时,如果未绑定EIP或私网IP时,四层监听器(TCP/UDP)所关联的后端服务器会显示健康检查异常。
检查后端服务器是否正常
如果后端服务器的操作系统为Windows,请通过浏览器直接访问https://后端服务器的IP : 健康检查配置的端口。如果返回码为2xx或3xx,则表示后端服务器正常。
- 您可以在后端服务器上通过以下命令查看后端服务器的健康检查端口是否被健康检查协议正常监听。
netstat -anlp | grep port
回显中包含健康检查端口信息并且显示LISTEN,则表示后端服务器的健康检查端口在监听状态,如图1中表示880端口被TCP进程所监控。
图2 后端服务器没有被监听的回显示例
如果健康检查端口没有在监听状态(后端服务器没有被监听),您需要先启动后端服务器上的业务,启动业务后再查看健康检查端口是否被正常监听。
- 如果是HTTP健康检查,请您在后端服务器上执行以下命令查看回显中返回的状态码。
curl 后端服务器的私有IP:健康检查端口/健康检查路径 -iv
HTTP健康检查是ELB向后端服务器发起GET请求,当获取到以下所列的响应状态码,认为服务器是正常状态。
对于TCP的监听器,HTTP健康检查正常返回状态码是200。
对于共享型ELB:HTTP健康检查正常返回状态码是200、202或者401。
图3 后端服务器异常的回显示例
图4 后端服务器正常的回显示例
- 如果HTTP健康检查异常,除了检查健康检查路径外,建议您将配置的HTTP健康检查修改为TCP健康检查。操作如下:
在监听器界面,修改目标监听器,在配置参数里选择已有TCP健康检查的后端服务器组,或者选择新创建TCP健康检查的后端服务器组。配置完成之后,几十秒后去查看健康检查状态是否恢复正常。
检查后端服务器防火墙
如果后端服务器内部开启了防火墙或其他安全类防护软件,这些软件可能会屏蔽ELB发起健康检查的源IP网段。
当后端服务器关联至共享型负载均衡使用,请您在防火墙规则中放通100.125.0.0/16网段的IP。
检查后端服务器路由
请检查是否手动修改了后端服务器内部的路由,查看主网卡(比如eth0)上是否配置默认路由,默认路由是否修改。如果默认路由更改,可能导致健康检查报文无法到达后端服务器。
ip route
或
route -n
正常的回显如图5所示。
如果回显中没有像图5中的第一条路由信息,或者路由指向的IP的不是后端服务器所在VPC子网的网关,请您配置默认路由指向网关。
提交工单
如果上述方法均不能解决您的疑问,请提交工单寻求更多帮助。