####LVS持久连接?
LVS持久连接就是,能实现在一定时间内,将来自同一个客户端请求派发至此前选定的relaserver。
例如:张三用浏览器请求了web服务器,我们的集群把他定向到了realserver1这台机器上。那么以后张三在我们规定的时间内,对web服务的请求都会到realserver1上。
注意:只要使用持久连接就会破坏负载均衡。所以采用持久连接的时候还是看看你是否真的有这样的使用场景需求。能不用就不用。
###为什么需要LVS持久连接呢?
我们集群有多个realserver服务器,如果我们把跟踪用户的session保存在realserver1上,下次这个用户被分到了realserver2上。realserver2上哪里会有session。这就使用户很不爽(当然你把session独立出来保存在数据库里另说)。或者我们的后端的服务是基于ssl的,那每次用户被重新分到一台机器上都得重新建立加密传送。
因此需要用到LVS持久连接的场景:基于ssl的加密传送、session等。
###LVS持久连接的分类
1、PPC:将来自于同一个客户端对同一个集群服务的请求,始终定向至此前选定的RS。注意其他没有使用持久连接的集群服务不会受影响; 持久端口连接
2、PCC:将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS; 持久客户端连接
把所有端口统统定义为集群服务,一律向RS转发;
3、PNMPP:持久防火墙标记连接,是PCC模式的改进版,因为PCC模式的使用必须把所有端口都定义为集群服务(这就郁闷了,我用ssh都不可能连到director上)。所以需要PNMPP 来把多个服务,组合成一个对象。然后同一用户多这几个服务的请求都会被定向到同一个realserver上。
###LVS持久连接,实例。
1、PPC 演示,在director代理服务器上执行。这样张三对http服务的请求都会定向到同一个realserver上(600秒内)
//添加集群服务并添加服务器
ipvsadm -A -t 192.168.99.201:80 -s wlc -p 600 ##添加一个服务(192.168.99.201:80) ,集群选择realserver算法为wlc(权重最少连接),持久连接的持续时间(5分钟)
ipvsadm -a -t 192.168.99.201:80 -r 192.168.99.207 -g -w 1 ##向集群中添加一台realserver ,指定集群工作模式为DR(-g就是指定DR模式) ,该realserver权重为1
ipvsadm -a -t 192.168.99.201:80 -r 192.168.99.208 -g -w 1 ##添加的第二台机器
//查看规则是否添加完毕
ipvsadm -L -n
//测试,注意单独启动一台机器运行curl命令。并且最好不要使用windows10系统上运行浏览器测试,windows10系统ARP缓存会对集群有影响。
curl http://192.168.99.201/1.html ##多运行即可
ipvsadm -L -n --persistent-conn ##查看持久连接数量
2、PCC演示,在director上运行。ipvsadm命令的使用,请自行查看之前博客。这样张三多所有服务的请求都会定向到同一台realserver上(600秒内)
注意:最好不要在云服务器上运行这种模式,(运行了的话你只能重启实例了)。运行下方的集群配置你的director就会成为一个透明的机器。连ssh服务都连不上。所以我们一般用下方的PNMPP方式。
ipvsadm -C ##清除之前所有的ipvs规则,保存规则service ipvsadm save。
ipvsadm -A -t 192.168.99.201:0 -s rr -p 600 ##添加一个集群服务,所有端口都成为集群代理(:0就是这个作用) ,选择realserver算法rr, 持久连接持续时间600秒
ipvsadm -a -t 192.168.99.201:0 -r 192.168.99.207 -g -w 2 ##添加一台realserver
ipvsadm -a -t 192.168.99.201:0 -r 192.168.99.208 -g -w 3 ##再添加一台realserver
//查看规则是否添加完毕
ipvsadm -L -n
//测试,注意单独启动一台机器运行curl命令。并且最好不要使用windows10系统上运行浏览器测试,windows10系统ARP缓存会对集群有影响。
curl http://192.168.99.201/1.html ##多运行即可
ipvsadm -L -n --persistent-conn ##查看持久连接数量
3、PNMPP演示。我们以80和443服务为例,组合服务。 这样张三对http和https服务的请求都会定向到同一个realserver上(600秒内)
iptables -t mangle -A PREROUTING -d 192.168.99.201 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8 ##在防火墙的mangle表PREROUTING链上把目标地址是192.168.99.201的并且是从eth0网卡进来的并且端口是80的所有数据包都打上8的标记(标记数字可以使0-99,随便一个就行)
iptables -t mangle -A PREROUTING -d 192.168.99.201 -i eth0 -p tcp --dport 443 -j MARK --set-mark 8 ##把443的数据包都打上8的标记
ipvsadm -A -f 8 -s rr -p 600 ##添加一个集群服务,这个集群服务是基于防火墙标记的。意思就是director在INUT链上把所有标记号是8的数据包都转向POSTROUTING链并转向后方。
ipvsadm -a -f 8 -r 192.168.99.207 -g -w 2 ##向-f 8 的集群服务,添加realserver服务器,director会使用rr算法选择一个realserver服务。
ipvsadm -a -f 8 -r 192.168.99.208 -g -w 3
//查看规则是否添加完毕
ipvsadm -L -n
//测试,注意单独启动一台机器运行curl命令。并且最好不要使用windows10系统上运行浏览器测试,windows10系统ARP缓存会对集群有影响。
curl http://192.168.99.201/1.html ##多运行即可