LVS持久性工作原理和配置方法

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 条评论。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据