目录
LVS持久连接技术
lvs的持久性连接有两方面。
1、把同一个client的请求信息记录到lvs的hash表里,保存时间使用persistence_timeout控制,单位为秒。persistence_granularity 参数是配合persistence_timeout的,在某些情况特别有用,他的值是子网掩码,表示持久连接的粒度,默认是255.255.255.255,也就是单独的client ip,如果改成,255.255.255.0就是client ip一个网段的都会被分配到同一个real server。
2、一个连接创建后空闲时的超时时间,这个时间为3种
a、tcp的空闲超时时间
b、lvs收到客户端tcp fin的超时时间
c、udp的超时时间
如何查看这些值?
# ipvsadm //可以查看连接空闲的超时时间,红色标记。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 122.225.32.142:http rr persistent 10
-> 122.225.32.137:http Route 1 0 1
-> 122.225.32.136:http Route 1 0 0
# ipvsadm -l –timeout //查看tcp tcpfin udp的超时时间
Timeout (tcp tcpfin udp): 900 120 300
他们是如何工作的?
我们通过
# ipvsadm -Lcn
IPVS connection entries
pro expire state source virtual destination
TCP 00:57 NONE 110.184.96.173:0 122.225.32.142:80 122.225.32.136:80
TCP 01:57 FIN_WAIT 110.184.96.173:54568 122.225.32.142:80 122.225.32.136:80
当一个client访问vip的时候,ipvs或记录一条状态为NONE的信息,红色的值的初始值是persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。
FIN_WAIT的值就是tcp tcpfin udp的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成60秒,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。
如何设置这些值?
persistence_timeout可以通过以下两种方法设置
1、 ipvsadm -A -t 192.168.20.154:80 -s rr -p 60
注意:上面命令中红色标记的80端口,表示同一客户端访问服务器的80端口,会被定义到同一个real server,如果把80端口改为0,那么同一客户端访问服务器的任何服务都会被转发到同一real server。
2、修改keepalived配置文件在虚拟服务器配置下面加入 persistence_timeout 60
tcp tcpfin udp的配置
#ipvsadm –set tcp tcpfin udp
# ipvsadm –set 120 50 50 //实例
建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算。
参考资料
Persistence Handling in LVS:http://www.linuxvirtualserver.org/docs/persistence.html
lvs持久性工作原理和配置:http://www.360doc.com/content/14/0417/16/1123425_369788051.shtml
lvs+keepalived使用总结:http://isadba.com/?p=67
0 条评论。