教学之友,学习之友。

站长教学网

lvs持久性工作原理和配置

时间:2012-07-19 11:17来源:未知 作者:ken 点击:

一、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可以通过以下两种方法设置 站长教学网 eduyo.com

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的值,这样比较方便计算。

lvs持久性参考资料:

http://www.linuxvirtualserver.org/docs/persistence.html

二、防火墙标记

http://lymrg.blog.51cto.com/1551327/684681

三、conn_syncd

lvs负载调度器在进行切换的时候,还是会影响服务的,因为备用的调度器上没有已经建立的连接信息,当这些已经建立的连接通过备用的调度器的时候,连接会被reset掉,从而导致连接中断,这个时候就该conn_syncd上场了。详细信息请参见(http://www.linuxvirtualserver.org/docs/sync.html),lvs中文手册也提到过这个问题。

解决方案:

Here is simple intructions to use IPVS connection synchronization. On the primary load balancer, run
#ipvsadm --start-daemon=master --mcast-interface=eth0
On the backup load balancers, run
#ipvsadm --start-daemon=backup --mcast-interface=eth0
To stop the daemon, run
#ipvsadm --stop-daemon

注意:这个命令需要手工启用,并且如果主lvs挂掉,切换到备用的时候,连接信息是同步的,但是主恢复,抢占vip后,连接信息是不会被反同步回去的。配置不抢占是使用nopreempt,只能配置在backup状态的主机,并且优先级必须比另外一台高,也就是配置在主lvs上,但是主lvs不能配置state master值。

(责任编辑:ken)
TAG标签: lvs 持久性
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容