问题描述
传统型负载均衡CLB实例中开启TCP监听的健康检查功能后,后端服务器的业务日志中频繁出现类似Connection reset by peer
的网络连接错误。经网络抓包分析,发现相关请求来自CLB实例,同时CLB实例主动向后端服务器发送了RST数据包中断连接。业务日志中的错误信息类似如下。
问题原因
该问题和CLB的健康检查机制有关。由于TCP协议对上层业务的状态无感知,同时,为了降低健康检查成本以及对后端服务的冲击,CLB针对TCP监听的健康检查只进行简单的TCP三次握手,而后直接发送RST数据包断开TCP连接,没有进一步的业务数据交互,导致上层业务认为连接异常,如Java连接池等,所以抛出Connection reset by peer
异常。详细的数据交互过程如下:
CLB实例向后端服务端口发送SYN请求包。
后端服务器收到请求后,如果端口状态正常,则按照正常的TCP协议机制返回相应的SYN和ACK应答包。
CLB实例成功收到后端服务端口的应答,则认为端口监听是正常的,判定健康检查成功。
CLB实例向后端服务端口直接发送RST数据包主动关闭连接,结束本次健康检查操作,并且不发送业务数据。
解决方案
针对该问题,请结合业务的需求和实际情况,从下列两种解决方案中选择适合您的方案:
方案一:更换监听类型更换CLB的TCP监听为HTTP监听或HTTPS监听,详情请参见添加HTTP监听和添加HTTPS监听。
方案二:日志过滤在上层业务的层面,对CLB健康检查的IP地址段做日志过滤,忽略相关错误信息。
说明CLB的健康检查地址段为100.64.0.0/10。
适用于
传统型负载均衡CLB
文档内容是否对您有帮助?