什么是持久连接? Lvs是负载均衡,后端会有多个真实提供服务的机器,当一个用户访问时,需要将这个用户的请求持续的分配到一台机器上,而不是在多台机器上轮询。
于电子商务网站来说,用户在挑选商品的时候使用的是http:80端口来浏览的,当付款的时候则是通过https:443端口加密的方式;我们不希望http:80挑选商品的信息在Real Server1,而https:443商品付款的时候跳转到另外一台Real Server2;并且https:443需要交换SSL密钥,当启用持久性连接时,只需要做一次验证即可。
session方式: session绑定(session sticky) 始终将同一个请求者的请求发送到同一台RS(第一次请求由算法调度) 缺陷:没有容错能力,若此RS宕机,则会话丢失,并且将同一请求发送到同一RS有损均衡效果。
session复制(session cluster) 在RS之间同步session,因此每个RS都保持集群中的所有session 缺陷:增加了RS的负担,对大规模的集群不适用
session服务器(session server),redis: 用单独一组服务器来管理session
持久连接方式: 后端RS可以使用redis等方式共享session,来识别客户端。 使用轮询算法中的SH算法。 Lvs自带持久连接选项,可以将同ip的请求分配到同后端RS。
Lvs持久连接: ipvs内有一个LVS持久连接模板,模板中记录了每一个请求的来源、调度至的Real Server、维护时长等等,在新的请求进入时,首先在此模板中检查是否有记录(有内置的时间限制,比如限制是300秒,当在到达300秒时依然有用户访问,那么持久连接模板就会将时间增加两分钟,再计数,依次类推,每次只延长2分钟)。
如果该记录未超时,则使用该记录所指向的Real Server,如果是超时记录或者是新请求,则会根据调度算法先调度至特定RS,再将调度的记录添加至此表中。这并不与SH算法冲突,LVS持久连接会在新请求达到时,检查后端Real Server的负载状况,这就是比较精细的调度和会话保持方法
持续时间: 把同一个client发来请求到同一台Real Server的持久超时时间,默认300秒
persistent port connections。持久的端口连接,将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的RS。
例如,来自同一个IP的用户第一次访问集群的80端口分配到Real Server1,433号端口分配到Real Server2。当之后这个用户继续访问80端口仍然分配到Real Server1,433号端口仍然分配到Real Server2。
配置:
Director加上-p timeout选项即可
ipvsadm -A -t 192.168.1.100:80 -s wrr–p 300
persistent client connections。将来自于同一个客户端的所有请求统统定向至此前选定的RS;也就是只要IP相同,分配的服务器始终相同。
例如,来自同一个IP的用户访问集群的80端口分配到Real Server1,然后用户访问433号端口仍然分配到Real Server1。但如需要SSH:22连接管理Director时,也被分配到Real Server就不好了,下面的PNMPP可以解决这个问题。
配置:
配置Director时使用0号端口,加上-p timeout选项,这样把所有端口统统定义为集群服务,全部向Real Server转发
ipvsadm -A -t 192.168.1.100:0 -s wrr–p 300
ipvsadm -a -t 192.168.1.100:0 -r 192.168.1.102 -g -w 1
ipvsadm -a -t 192.168.1.100:0 -r 192.168.1.103 -g -w 3
Persistent Netfilter Marked Packet Persistence。基于防火墙标记的持久性连接,这种防火墙标记仅在数据包在分发器上时有影响,数据包一旦离开Director,就不再被标记。
需要用到iptables的mangle表为数据包设置Mark标记,mangle表主要用于修改数据包的TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置Mark标记。
它可以将两个毫不相干的端口定义为一个集群服务,例如:合并http的80端口和https的443端口定义为同一个集群服务,而不会出现上面PCC据说的问题。
配置:
配置Director时先配置iptables的mangle表为数据包设置Mark标记,下面设置80和22(SSH)端口的数据包都加上标记10,然后ipvs配置就可用-f mask选项,将两个毫不相干的端口定义为一个集群服务
iptables -t mangle -A PREROUTING -d 192.168.1.100 -i eth0 -p tcp --dport 80 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 192.168.1.100 -i eth0 -p tcp --dport 22 -j MARK --set-mark 10
ipvsadm -A -f 10 -s wrr -p 600
ipvsadm -a -f 10 -r 192.168.1.102 -g -w 1
ipvsadm -a -f 10 -r 192.168.1.103 -g -w 3
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。