负载均衡的session与realserver上tcp状态的关系
session ~= SYN_RCVD + ESTABLISHED + FIN_WAIT1 + FIN_WAIT2 + (?)
SYN_RCVD ESTABLISHED FIN_WAIT1 FIN_WAIT2 都是标准tcp状态,不再解释,简单解释一下?状态.
?状态: 表示realserver的半连接队列已经满了,不再接收LB发送过来的SYN包,这些都将堆积在session表里.
这种情况一般发生在webserver的线程池满了,在apache下比较常见.
影响session数的几种情况:
(1) realserver处理响应变慢,堆积 ESTABLISHED 状态,导致session堆积.
(2) realserver的webserver打开了keepalive,增加了ESTABLISHED状态的停留时间.
(3) FIN_WAIT1状态,socket发送缓冲区数据堆积. (网络慢或者对方接收数据慢)
(4) FIN_WAIT2半关闭状态,client端没有回复FIN包.
(5) realserver不再接收新的SYN包,健康检查时好时坏. (比如后端java响应慢,导致webserver线程堆积满)