LVS(五)LVS的持久连接

什么是持久链接

把某个客户端的请求始终定向到同一应用服务器上。对于LVS来说持久连接和算法没有关系。也就是使用任何算法LVS都可以实现同一客户端的请求转发到之前选定的应用服务器,以保持会话。而且还能实现同一客户端的不同请求都可以定向到同一应用服务器,比如集群中2台应用服务器,每个应用服务器都提供WEB服务和TELNET服务,那么只要客户端一样,即使它两次请求不同服务,也可以定向到同一应用服务器上。

所以LVS支持2中模式

  • PPC:持续端口连接,将来自同一客户端对同一服务定向到同一应用服务器上
  • PCC:持续客户端连接,将来自同一客户端对所有服务定向到同一应用服务器上
  • PNMPP:持久防火墙标记连接

LVS会在自己的内存缓冲区内维护一个持久连接表,每一个客户端以及为其分配的应用服务器都有一个对应关系,前提是没有会话没有超时。LVS本身有查看持久连接的命令。

Ipvsadm –L –persistent-conn  # 显示持久连接
ipvsadm –L –c  # 显示持久连接表

对于LVS来说启用持久连接就是在建立集群服务的时候制定-P参数,也就超时时长,默认300秒。

Ipvsadm –A|E…… -P

在基于SSL的会话中,通常都会用到持久连接,因为在建立连接的时候双发需要进行认证、加密等等,如果会话不能维持,那就会出现一刷新就去协商,这样很浪费资源而且效率低下。

设置默认持久连接

我们测算持久连接,我们先把算法改成RR,这样是轮训的,比较好看出效果:

这样浏览器没刷新一次就会变换一次WEB服务

设置持久连接,使用-p参数的默认值,默认是360秒,这样在360秒内,怎么刷新都是同一个应用服务器。即便是同一主机的不同浏览器也是一样。

因为同一主机都定向到同一服务器,所以它的非活动链接就比较大。

设置同一主机发起的不同服务请求持久连接(PPC模式,同端口保持持久)

我们这里使用WEB和TELNET,80端口目前就有,然后我们在应用服务器上启动TELNET服务,也就是23号端口。

在Linux上是不允许root账号TELNET上来的,所以要测试Telnet连接需要单独建立账号,就是普通的账号就行。

在2台应用服务器上都进行安装:

启动服务

在每台应用服务器上建立一个用户,过程略。测试TELNET如下:

再建立一个集群服务针对23号端口,如下:

连接测试,打开2个终端

这时候TELENT都定向到同一服务器,虽然打开了不同的终端。下面我们同时在访问以下WEB,如下

可以看到,这就是PPC模式,也就是同一主机的访问不同服务,都定位到相同主机上。在超时时长内,你访问80端口永远都会是定向到同一主机,访问23也一样,不同服务定的主机可能会不相同,但是同一服务定向的主机肯定相同。

如果要实现不管是否是相同服务,只要是来自同一主机的,在超时时长内都定向到同一应用服务器,这就是PCC模式。

设置同一主机发起的不同服务请求持久连接(PCC模式,同客户端保持持久)

PCC模式的原理就是,无论用户请求哪个服务端口,都向应用服务器转发,说白了就是它只看客户端IP,不看客户端访问端口,只要IP是同一个,就向之前选定的应用服务器转发,如果它请求的端口在应用服务器上没有,那就报错了,这个报错就是找不到服务,也并不是说严重的错误。

我们使用ipvsadm –C清除所有集群服务,然后重新建立。

我们看到端口设定的是0,其实就是意味着所有端口,当你设定端口是0的时候,就必须制定-p参数。其实是否是PCC还是PPC模式关键就是看集群服务设置的是0端口还是特定端口。我们再来测试一下:

这时候我们看到无论只要第一次访问定位到一个主机,那么在超时时长内,无论放访问什么服务都会定向到同一主机。

PCC可以把同一主机的不同服务都定向到同一应用服务器,但是这要允许所有端口请求,如果我想实现指定的某几个端口服务而不是全部端口,那该如何实现?那就只能是把不同端口绑定到同一集群服务,这就要用防火墙标记功能。

设置指定端口的来自同一主机定向到同一应用服务器(PNMPP,持久防火墙标记)

在防火墙的PREROUTING链上定义端口标记,比如把80、23等等都设置为同一个标记,然后在集群服务上很对标记来做。

如何定义标记呢?清空现有额IPVS规则:

设置防火墙的PREROUTING规则:

意思是 –t 指定为mangle表;-A 添加在PREROUTING链上(刚进入的时候就需要打标记,这是IPTABLES的4个链条中的第一个);-d 目标地址(VIP);-I eth0 设定流入网卡,也可以不设置;-p tcp设置为TCP协议;--dport 80是指定80端口;-j MARK 打标记;--set-mark 10标记号为10(任何一个没有被占用的)。

创建集群服务

注意我这里还没有设置持久连接,因为没有加-p参数。-f 10是指定防火墙标记为10的,这个在上面IPTABLES中已经配置了。

添加应用服务器

配置好以后,你可以通过80访问网页,也可以通过TELNET登录。如果要用持久连接,就直接加-p参数。这里我修改一下,还是防火墙标记10,这里设置了持久连接时长-p,默认360秒。

访问测试:130就是WEB2

注意:在生产环境中80一般和443绑定一起,所以就用防火墙标记。 虽然使用持久连接会破坏负载均衡,但是对于WEB这种服务尤其是电商、论坛、博客、微博等等网站必须使用,否则会话就中断了。

总结

虽然LVS可以做持久连接但是通常我们也不这样来做,一般都是用缓存服务器来保存用户的会话。下面用一个非常简单结构来说明

上面是一个论坛架构,通过LVS做负载均衡,同时为了不增加LVS的负担不开启连接持久化功能,但是为了保证用户会话的一致性,使用了Memcached缓存服务器,PHP可以将用户的会话信息保存在Memcached服务器上,无论有多少WEB前端服务器,都可以去Memcached服务器上去获取用户会话信息。这样就实现了会话的一致和共享。Memcached本身不是服务,它是一个编程API。

因为是多个WEB前端服务器,网站更新页面是正常的,为了批量快速更新页面文件,就需要一种文件同步机制,因为这些页面文件都保存在WEB服务器本地,所以就使用Sersync(C/S结构)来完成,WEB服务器安装客户端,当它们收到inotify通知以后就去服务器上拉取文件进行更新。
用户上传的附件这些事不能保存在数据库上的,所以使用文件服务器来存放。

对于电商网站来说,80和443绑定在一起,因为付款的时候都会用到443安全连接上。但是虽然80和433都页面,但是他们是不同服务,所以还要用LVS持久连接,无论是否用了会话共享,如果付款的时候可以把这些信息抽取出来转移到一个新的服务上去,而不是WEB服务,那就是另外一回事。上面这种场景如果用443,那么所有WEB服务器都要绑定证书,他们使用同一个证书就行,因为对外域名一样。

小作业:在WEB服务器上开启80和433服务,然后使用持久连接方式保持回话。 

原文地址:https://www.cnblogs.com/yunxizhujing/p/9751046.html

时间: 2024-11-10 19:50:53

LVS(五)LVS的持久连接的相关文章

LVS/DR模型及持久连接

HostName AddressIP Role VirtualIP DEV LVS/DR 192.168.1.150/24 LVS,CA eth0:0 192.168.1.250 node2 192.168.1.120/24 RealServer(httpd) lo:0 192.168.1.250 node3 192.168.1.130/24 RealServer(httpd) lo:0 192.168.1.250 1)DR模型配置前的准备 两RealServer配置如下(一摸一样): [[em

LVS负载均衡之session解决方案 持久连接

1. 持久连接是什么? 1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同一台服务器. 2. 为什么会用到持久连接? 2.1 cookie/session机制的简单说明: 在Web服务通信中,HTTP本身是无状态协议,不能标识用户来源,此时出现了一个问题,当用户在一个网站浏览了A网页并跳转到B网页,此时服务器就认为B网页是一个新的用户请求,你之前的登陆的信息就都丢失了,头疼.为了记录用户的会话信息,我们的开发者就在客户端/服务器端软件提供了cookie/session

【转】LVS负载均衡之session解决方案 持久连接

原文地址:http://minux.blog.51cto.com/8994862/1744761 1. 持久连接是什么? 1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同一台服务器. 2. 为什么会用到持久连接? 2.1 cookie/session机制的简单说明: 在Web服务通信中,HTTP本身是无状态协议,不能标识用户来源,此时出现了一个问题,当用户在一个网站浏览了A网页并跳转到B网页,此时服务器就认为B网页是一个新的用户请求,你之前的登陆的信息就都丢失了,头

Linux集群系列之六——LVS持久连接

DR: arp_ignore = 1 arp_announce = 2 数组:变量阵列 array_name=("" "" "" ) declare -a A 把一个变量明确申明为数组 LVS的持久连接:   无论使用什么算法,LVS持久连接都能实现在一定时间内将来自同一个客户端请求派发到同一个RS. 持久连接模版(内存缓冲区): 每一个客户端 及分配给它的RS的映射关系: ipvsadm -L -c 显示当前的持久连接数 ipvsadm -A|

lvs持久连接

在我们实现lvs负载均衡的同时是否想过这样的一个问题:当客户访问一台WEB服务器时,如果每次客户刷新页面后多会更变连接的realserver,那么这样客户是会非常苦恼的,因为客户一刷新前面的数据和保留的session信息就 找不到了. 对于这样的问题我们该怎么解决呢? 其实解决的这个问题是有很多方法的,下面我就来介绍关于lvs提出的解决方案吧--------------基于lvs持久连接. lvs持久连接的三种模型: 1.PCC 将某个客户的所用访问请求在超时时间内都定向到同一台server上

LVS的持久连接及应用的实例

LVS持久连接的意义: 在固定时间内将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS:在指定时长内不再根据调度算法进行调度,会根据内存的ipvs的连接模版里的记录信息将同一个客户端的请求定向至同一个后端RS: 持久连接的类型: 1.PCC:持久客户端连接,将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS (只是根据Vip,所有服务都是集群服务,不同的服务都会被定向至同一个RS): 2.PPC:持久端口连接,将来自于同一个客户端发往某VIP的某端口的所有请求统统定向至同一个

LVS 持久连接 PPC模式、PCC模式、防火墙标记

持久连接 PPC模式.PCC模式.防火墙标记 [LVS]我的是X86的系统 ipvsadm 功能类似Iptables 管理集群服务 增删改 管理RS增删改 查看 –L [磨刀不误砍柴工]看清楚,不要配置错了 两台RS都安装 192.168.3.123     192.168.3.87 网关都一样 route add default gw 192.168.3.77 [做不同端口持久连接测试用] yum -y install telnet-server yum -y install httpd se

LVS的持久连接和awk/sed/grep的学习笔记

一.LVS持久连接的模式 1.PPC(persistent port connection) ipvsadm -A|E 192.168.10.1:80 -p 600 定义VIP为192.168.10.1director的80端口为持久连接,也就是只把web服务加入集群服务,可以通过改变端口实现不同服务的持久连接且把不同服务加入集群服务 2.PCC(persistent client connection) ipvsadm -A|E 192.168.10.1:0 -p 600 定义VIP为192.

LVS持久连接(PPC+PCC+PNMPP)

无论使用哪种算法,LVS的持久连接都实现在一定时间内,将来自同一客户端的多种请求派发至此前选定的real-server. 持久连接模板(内存缓冲区): 记录每一个客户端及分配给它的RS. 查看当前的持久连接: ipvsadm -L -persistent-conn ipvsadm -L -c 设置持久连接: ipvsadm -A|-E ... -p timeout 默认timeout为300S. 在基于SSL会话的连接中,最需要使用持久连接. PPC(持久端口连接):将来自于同一个客户端对同一个