在我们实现lvs负载均衡的同时是否想过这样的一个问题:当客户访问一台WEB服务器时,如果每次客户刷新页面后多会更变连接的realserver,那么这样客户是会非常苦恼的,因为客户一刷新前面的数据和保留的session信息就 找不到了。
对于这样的问题我们该怎么解决呢?
其实解决的这个问题是有很多方法的,下面我就来介绍关于lvs提出的解决方案吧--------------基于lvs持久连接。
lvs持久连接的三种模型:
1、PCC 将某个客户的所用访问请求在超时时间内都定向到同一台server上 基于客户端的持久连接
2、PPC 将某个客户的某个服务访问请求在超时时间内都定向到同一台server上 基于会话的端口持久连接
3、Netfilter Mark 基于防火墙标志的持久连接(将多个服务端口绑定到一起,定义有限个服务为集群服务)
PCC:
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -At 192.168.1.63:0 -s rr -p 500
[[email protected] ~]# ipvsadm -at 192.168.1.63:0 -r 192.168.1.65 -g
[[email protected] ~]# ipvsadm -at 192.168.1.63:0 -r 192.168.1.66 -g
[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr persistent 500
-> 192.168.1.65:80 Route 1 0 0
-> 192.168.1.66:80 Route 1 0 0
在super64上访问vip:
[[email protected] ~]# elinks 192.168.1.63 -dump
192.168.1.66
[[email protected] ~]# ssh 192.168.1.63
[[email protected] ~]
再次在super63上查看:
[[email protected] ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:80 rr persistent 500
-> 192.168.1.65:80 Route 1 0 0
-> 192.168.1.66:80 Route 1 0 2
连接一直定位到66
PPC:
[[email protected] ~]# ipvsadm -C
[[email protected] ~]# ipvsadm -At 192.168.1.63:22 -s rr -p
[[email protected] ~]# ipvsadm -At 192.168.1.63:80 -s rr -p
[[email protected] ~]# ipvsadm -at 192.168.1.63:80 -r 192.168.1.65 -g
[[email protected] ~]# ipvsadm -at 192.168.1.63:80 -r 192.168.1.66 -g
[[email protected] ~]# ipvsadm -at 192.168.1.63:20 -r 192.168.1.65 -g
[[email protected] ~]# elinks 192.168.1.63 -dump
2次访问多定位到66
[[email protected] ~]# ssh 192.168.1.63
[email protected]‘s password:
Last login: Wed Aug 5 10:09:47 2015 from 192.168.1.64
[[email protected] ~]#
2次访问多定位到65
[[email protected] ~]# ipvsadm -nL
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.63:22 rr persistent 360
-> 192.168.1.65:22 Route 1 0 2
TCP 192.168.1.63:80 rr persistent 360
-> 192.168.1.65:80 Route 1 0 0
-> 192.168.1.66:80 Route 1 0 2
基于防火墙标记:
[[email protected] ~]#ipvsadm -C
将端口打上标记
[[email protected] ~]#iptables -t mangle -A PREROUTING -d 192.168.1.63 -i eth0 -p tcp -m multiport --dport 80,443 -j MARK --set-mark 8
创建规则(把防火墙的8定义为集群服务)
[[email protected] ~]#ipvsadm -A -f 8 -s rr -p --f
[[email protected] ~]#ipvsadm -a -f 8 -r 192.168.1.65 -g
[[email protected] ~]#ipvsadm -a -f 8 -r 192.168.1.66 -g
通过64分别访问vip的https与http服务:
2次访问的结果定位到同一主机。
[[email protected] ~]# ipvsadm -nL
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 8 rr persistent 360
-> 192.168.1.65:0 Route 1 0 2
-> 192.168.1.66:0 Route 1 0 0