LVS实现持久连接

由于HTTP是一种无状态协议,每次请求完毕之后就立即断开了,当用户浏览购物网站挑选商品的时候,看到一件商品加入购物车,此过程被重定向到了REALSERVER1上面来,当把第二件商品加入购物车又被重定向到了REALSERVER2上面,最后结账的时候在REALSERVER2上面,只有一件商品,这显然是用户无法接受的,此时就需要一种持久连接机制,来把同一用户的HTTP请求在超时时间内都重定向到同一台REALSERVER,超时时间可以自己定义,比如说2个小时,在超时时间内服务器会不断追踪用户的访问请求,把某一用户的所有请求都转发到同一台REALSERVER上面




对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款的时候我们当然不希望https的443跳转到另外一台REALSERVER,很显然应该是同一REALSERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现




无论ipvs使用何种scheduler,其都能够实现在指定时间范围内始终将来自同一个ip地址的请求发往同一个RS;此功能是通过lvs持久连接模板实现,其与调度方法无关;




一、准备至少三台服务器,一台做DS(桥接模式lvs-server:172.17.250.100 ,仅主机模式lvs-server:192.168.159.100),两台做RS(仅主机模式realserver1 :192.168.159.200 、  realserver2 :192.1683.159.201)


iptables -F         #关闭防火墙


setenforce 0      #关闭selinux


二、lvs-server配置


yum -y install ipvsadm


iptables -t mangle -A PREROUTING -d 172.17.250.100 -p tcp --dport 80 -j MARK --set-mark 99       #在iptables 打上标记,把80端口标记为99
iptables -t mangle -A PREROUTING -d 172.17.250.100 -p tcp --dport 443 -j MARK --set-mark 99     #在iptables打上标记,把443端口标记为99
ipvsadm -A -f 99 -s rr -p         #在lvs上建立基于99号标记的虚拟服务-s 算法
ipvsadm -a -f 99 -r 192.168.159.200 -m               #设置后端服务地址-m nat模式
ipvsadm -a -f 99 -r 192.168.159.201 -m




vim /etc/sysctl.conf 修改 net.ipv4.ip_forward=1  #修改内核配置,开启路由转发


sysctl -p           # 使其生效     




三、real-server配置


配置网关指向192.168.159.100,开启web、php-fpm、mysql服务


route add default gw 192.168.159.100