最近更新时间:2024-05-24 16:03:41
监听协议 | 含义 | 超时时间(单位:秒) | |
---|---|---|---|
TCP | 连接超时时间 | 配置TCP连接超时,连接空闲时间超过该时长后,负载均衡会主动断开该连接。 | 900 |
UDP | 会话超时时间 | 超过会话超时时间后,后端KEC回应SLB的转发,底层会因为UDP会话消亡,无法转发,而将后端响应数据包丢弃。 | 120 |
HTTP/HTTPS | 连接空闲超时时间 | 在超时时间内一直没有访问请求,负载均衡会暂时中断当前连接,直到下一次请求来时重新建立新的连接。 | 300 |
连接请求超时时间 | 在连接请求超时时间内后端服务器一直没有响应一个请求时,负载均衡将放弃等待,给客户端返回HTTP 504错误码。 | 60 |
注:当前负载均衡未开放超时时间给用户自行设置
如果客户端访问 SLB HTTP 监听时使用长连接,那么这条连接最长的空闲时间为 300 秒,即如果超过 300 秒没有发送任何 HTTP 请求,这条连接将会被 SLB 主动断开。如果您的业务可能会出现超过 300 秒的空闲,需要检测连接的断开并重新发起连接。
注:访问超时场景很多,本文档主要是从服务端入手分析
如流量黑洞和清洗,WAF 防护(waf 的特点是为建连后向 client 和 lvs 双向发送rst 报文)。
尤其容易发生在压测的时候,客户端端口不足会导致建立连接失败,负载均衡默认会抹除TCP连接的 timestamp 属性,linux 协议栈的tw_reuse ( time_wait 状态连接复用)无法生效,time_wait 状态连接堆积导致客户端端口不足。
解决方法: 客户端使用长连接代替短连接。使用 RST 报文断开连接( socket 设置 SO_LINGER 属性),而不是发 FIN 包这种方式断开。
后端服务器 accept 队列满,导致后端服务器不回复 syn_ack 报文,客户端超时。
解决方法:默认的 net.core.somaxconn 参数为 128 ,执行 sysctl -w net.core.somaxconn=1024 或者其它更大的值,并重启后端服务器上的应用。
4 层负载均衡,在该负载均衡的后端服务器上再去访问该负载均衡 VIP,这个目前是无法支持的,会导致连接失败,常见的场景是用户后端应用使用 URL 拼接的方式跳转访问。
负载均衡上建立 TCP 连接后如果 900s 未活动,则会向 client 和 rs 双向发送 rst 断开连接,有的应用对 rst 异常处理不当,可能会对已关闭的连接再次发送数据导致应用超时。
注: 这种情况建议调整后端主机系统内核参数 net.ipv4.tcp_keepalive_time 为小于 900s 的值。
纯净模式