负载均衡SLB后端服务器中time_wait状态连接数较多

负载均衡SLB后端服务器中time_wait状态连接数较多

更新时间:2020-06-17 15:51:57

问题描述

负载均衡SLB对后端多台服务器进行负载,且在客户端请求访问量为0的情况下,发现服务器中有大量TIME_WAIT状态的连接。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
  1. 登录后端服务器,执行以下命令,确认TIME_WAIT状态的连接数过多。
    while true;do netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}';sleep 1;done | grep TIME_WAIT
    系统显示类似如下。
    TIME_WAIT 424
    TIME_WAIT 430
    TIME_WAIT 437
    TIME_WAIT 447
    TIME_WAIT 455
    TIME_WAIT 464
    TIME_WAIT 473
    TIME_WAIT 481
    TIME_WAIT 490
    TIME_WAIT 498
    TIME_WAIT 506
    TIME_WAIT 513
  2. 这种情况下,有以下两种方法解决问题:
    注意:此问题一般出现在SLB的7层(HTTP)转发模式下,在SLB对HTTP请求进行转发时,由于是网络协议中应用层协议的请求,因此在您修改Web应用的超时时间设置、SLB健康检查频率以及系统自身的net.ipv4.tcp_keepalive_time等参数后,对TIME_WAIT状态的连接数目的降低不会有非常明显的效果。
    • 建议您使用SLB的4层(TCP)转发模式,详情请参见添加TCP监听。此模式在每次健康检查时,SLB都会主动通过发送RST状态的数据包断开与服务器的健康检查建立的TCP连接,所以是不会查看到来自SLB健康检查的连接。
    • 除了调整为TCP转发模式,您也可以考虑关闭HTTP转发模式下的健康检查功能,也可以降低TIME_WAIT状态的连接数。但是关闭健康检查后无法监控后端服务器是否存在异常,若SLB转发请求到异常服务器上,会导致访问异常。如何关闭健康检查,请参见关闭健康检查

适用于

  • 负载均衡SLB

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。