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服务,然后使用持久连接方式保持回话。
LVS(五)LVS的持久连接的更多相关文章
- 【转】LVS负载均衡之session解决方案 持久连接
原文地址:http://minux.blog.51cto.com/8994862/1744761 1. 持久连接是什么? 1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同 ...
- LVS持久连接
LVS持久连接 源地址HASH ipvs的连接模板 可以通过ipvsadm -L -c 持久连接持久客户端连接 PCC:在固定时间内将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS0表示所 ...
- lvs持久连接及防火墙标记实现多端口绑定服务
lvs持久连接及防火墙标记实现多端口绑定服务 LVS持久连接: PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS: PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向 ...
- LVS之NAT模型、DR模型配置和持久连接
前言:继LVS概述,本篇实现NAT模型和DR模型下的负载均衡. NAT模型: LVS-NAT基于cisco的LocalDirector.VS/NAT不需要在RealServer上做任何设置,其只要能提 ...
- LVS的持久连接、会话保持和高可用介绍
持续连接 1)持久连接(lvs persistence)模板: 实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS ipvsadm -A|E -t ...
- LVS负载均衡之持久性连接介绍(session篇)
在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到 ...
- HTTP要点概述:五,HTTP的无状态性,持久连接,Cookie
一,HTTP的无状态性: HTTP 是一种不保存状态,无状态(stateless)协议.HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过的请求或响 ...
- LVSDR模型与持久连接
LVS之DR模型以及持久连接 LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供任何功能,但是在这框架上提供了能够根 ...
- LVS+Nginx(LVS + Keepalived + Nginx安装及配置)
(也可以每个nginx都挂在上所有的应用服务器) nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...
随机推荐
- bzoj3435 [Wc2014]紫荆花之恋
如果这棵树不变的话,就是一个裸的点分树套平衡树,式子也很好推$di+dj<=ri+rj$,$ri-di>=dj-rj$ 平衡树维护$dj-rj$,然后查$ri-di$的$rank$即可. ...
- visual studio2015中开发python
之前下载了visual studio2017但是发现很不好用,不如使用matlab与visual studio混合编程就根本找不到visual studio,只有下了visual studio2015 ...
- java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava
搭建spring cloud的时候,报以下错误: java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplica ...
- mpvue 小程序开发爬坑汇总
<!-- 小程序的爬坑记录 --> 1 微信小程序之动态获取元素宽高 var obj=wx.createSelectorQuery(); 2 微信小程序图片自适应 <image cl ...
- 中国.NET:各地微软技术俱乐部汇总(持续更新中...)
中国.NET:各地微软技术俱乐部汇总(持续更新中...) 本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by 史记微软. ...
- “崩溃了?不可能,我全 Catch 住了” | Java 异常处理
前言 今天我们来讨论一下,程序中的错误处理. 在任何一个稳定的程序中,都会有大量的代码在处理错误,有一些业务错误,我们可以通过主动检查判断来规避,可对于一些不能主动判断的错误,例如 RuntimeEx ...
- 如何在新工程中添加两个不同版本的的echarts库
emmmmm.....标题我就觉得起的很变态.闲话不多说,先说出现的背景吧--. 因为业务上的需求,跟一个硬件对接,要做大屏展示大厅客流热力图分布(背景图是客户那边给的).然后这个机子传过来的数据就可 ...
- Sharepoint模态窗体(实战)
分享人:广州华软 无名 一. 前言 对SharePoint二次开发时,需要知道SharePoint有什么.没有什么,才能在开发过程中避免重复造轮子.SharePoint提供了许多开箱即用的功能,这次要 ...
- Git学习:如何在Github的README.MD文件下添加图片
格式如下:  关于图片的绝对路径: 必须把图片上传到github的代码仓库里,再将其图片的网址复制到括号里才可以,不能够直接把图片复制到readme.md文件里面,这 ...
- solr搭建(linux)
Solr版本:7.4.0 Tomcat版本:8.5 Jdk版本:1.8 最好在root用户下进行操作,为了更方便初学者理解,选用ubuntu操作,当然用命令操作过程是一样的,会命令操作的话看懂图形化操 ...