设为首页 收藏本站
查看: 1620|回复: 0

[经验分享] LVS负载均衡之持久性连接介绍(会话篇)

[复制链接]

尚未签到

发表于 2016-3-7 08:59:39 | 显示全部楼层 |阅读模式
在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到关于lvs持久性连接问题


一.lvs负载均衡持久连接介绍:

引子(案例)

  对于电子商务网站来说,用户在挑选商品的时候使用的是80端口来浏览的,当付款的时候则是通过443的ssl加密的方式,当然当用户挑选完商品付款 的时候,我们当然不希望https的443跳转到另外一台REAL SERVER上,很显然应该是同一REAL SERVER才对,这时候就要用到基于防火墙标记的持久连接,通过定义端口的姻亲关系来实现。在生产环境中用的最多的也是PNMP即基于防火墙标记的持久 连接。好了引子就说到这下面我们就来详细说说LVS的持久连接……


(1)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种

① tcp的空闲超时时间

② lvs收到客户端tcp fin的超时时间

③ udp的超时时间


(2)lvs相关超时时间查看:

1.通过"ipvsadm -Ln"可以查看persistence_timeout 超时时间(默认超时时间360s)

[iyunv@cn-sh-sq-web01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.51.96.105:80 rr persistent 360
  -> 192.168.0.235:80             Tunnel  1      0          0         
  -> 192.168.0.236:80             Tunnel  1      0          0         

2.通过"ipvsadm -Ln --timeout"可以查看tcp tcpfin udp的超时时间(默认:900 120 300)

[iyunv@cn-sh-sq-web01 ~]# ipvsadm -Ln --timeout
Timeout (tcp tcpfin udp): 900 120 300


(3)lvs是如何控制这些超时时间工作

[iyunv@cn-sh-sq-web01 ~]# ipvsadm -Ln -c
IPVS connection entries
pro expire state       source             virtual            destination
TCP 01:59  FIN_WAIT    172.51.96.1:54196  172.51.96.105:80   192.168.0.235:80
TCP 05:54  NONE        172.51.96.1:0      172.51.96.105:80   192.168.0.235:80

当一个client访问vip的时候,这时ipvs就会记录一条状态为NONE的信息,如述上所示,expire初始值为:persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。

FIN_WAIT的值就是tcp tcpfin udp的中tcpfin的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成persistence_timeout的值,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。


(4)lvs关于相关超时时间的设置

1. persistence_timeout 可以通过"ipvsadm -p timeout" 来设置,默认360秒

ipvsadm -A -t 192.168.20.154:80 -s rr -p 60

注意:上面命令中红色标记的80端口,表示同一客户端访问服务器的80端口,会被定义到同一个real server,如果把80端口改为0,那么同一客户端访问服务器的任何服务都会被转发到同一real server。

修改keepalived配置文件,在虚拟服务器配置下面加入persistence_timeout 60

2. tcp tcpfin udp 可以通过"ipvsadm --set 对应超时时间"来设置

ipvsadm --set tcp tcpfin udp

建议:tcpfin的值最好小于persistence_timeout的值,这样比较方便计算,也有利于tcpfin回收


(5)持久连接定义与原理

1.定义

持久连接是指无论使用什么算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派发至此前选定的RS。

2.原理

当使用LVS持久性的时候,Director在内部使用一个连接根据记录称之为“持久连接模板”来确保所有来自同一个客户端的请求被分发到同一台Real Server上。

说明:持久连接模板是指每一个客户端 及分配给它的RS的映射关系;

3.持久连接分类

(1).持久端口连接,简称PPC(Persistent Port Connections):将来自于同一个客户端对同一个集群某个服务的请求,始终定向至此前选定的RS;

例如:client---->LVS(80)---->RS1 或 client---->LVS(23)---->RS2

缺陷:期望访问不同的端口到同一台RS上,无法实现。

配置:

ipvsadm -A -t 172.16.100.1:80 -s rr -p 3600
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.10 -g -w 2
ipvsadm -a -t 172.16.100.1:80 -r 172.16.100.11 -g -w 2

(2).持久客户端连接,简称PCC(Persistent Client Connections):将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS;

说明:PCC是一个虚拟服务没有端口号(或者端口号为0),以"-p" 来标识服务。

缺陷:定向所有服务,期望访问不同的Real Server无法实现。

配置:

ipvsadm -A -t 172.16.100.1:0 -s rr -p 3600
ipvsadm -a -t 172.16.100.1:0 -r 172.16.100.10 -g -w 2
ipvsadm -a -t 172.16.100.1:0 -r 172.16.100.11 -g -w 2

(3).PNMPP(Persistent Netfilter Marked Packet Persistence):,基于防火墙设置端口绑定的持久连接,例如后台realserver同时提供80和443端口的服务,并且两个服务之间有联系,这时就要用到PNMPC。

先对某一特定类型的数据包打上标记,然后再将基于某一类标记的服务送到后台的Real Server上去,后台的Real Server 并不识别这些标记。将持久和防火墙标记结合起来就能够实现端口姻亲功能,只要是来自某一客户端的对某一特定服务(需要不同的端口)的访问都定义到同一台 Real Server上去。

案例:一个用户在访问购物网站时同时使用HTTP(80)和HTTPS(443)两种协议,我们需要将其定义到同一台Real Server上,而其他的服务不受限制。

配置:

iptables -t mangle -A PREROUTING -d 172.16.100.1 -i eth0 -p tcp --dport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -d 172.16.100.1 -i eth0 -p tcp --dport 443 -j MARK --set-mark 8
ipvsadm -A -f 8 -s rr -p 600
ipvsadm -a -f 8 -r 172.16.100.10 -g -w 2
ipvsadm -a -f 8 -r 172.16.100.11 -g -w 1


总结:关于lvs持久性连接需要根据业务场景来选择,比如电商平台,对应的持久性连接应该是PNMPP,另外还需要根据连接类型,比如长连接和短连接,来设置相关超时时间,总之,根据应用场景来选择!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-187337-1-1.html 上篇帖子: LVS负载均衡之LVS-DR实例部署(配置篇) 下篇帖子: LVS-NAT模型演示 持久性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表