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可以通过以下两种方法设置 站长教学网 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值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值