什么是持久链接

把某个客户端的请求始终定向到同一应用服务器上。对于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的持久连接的更多相关文章

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

    原文地址:http://minux.blog.51cto.com/8994862/1744761 1. 持久连接是什么? 1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同 ...

  2. LVS持久连接

    LVS持久连接 源地址HASH ipvs的连接模板 可以通过ipvsadm -L -c 持久连接持久客户端连接 PCC:在固定时间内将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS0表示所 ...

  3. lvs持久连接及防火墙标记实现多端口绑定服务

    lvs持久连接及防火墙标记实现多端口绑定服务 LVS持久连接: PCC:将来自于同一个客户端发往VIP的所有请求统统定向至同一个RS: PPC:将来自于一个客户端发往某VIP的某端口的所有请求统统定向 ...

  4. LVS之NAT模型、DR模型配置和持久连接

    前言:继LVS概述,本篇实现NAT模型和DR模型下的负载均衡. NAT模型: LVS-NAT基于cisco的LocalDirector.VS/NAT不需要在RealServer上做任何设置,其只要能提 ...

  5. LVS的持久连接、会话保持和高可用介绍

    持续连接 1)持久连接(lvs persistence)模板: 实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS ipvsadm -A|E -t ...

  6. LVS负载均衡之持久性连接介绍(session篇)

    在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到 ...

  7. HTTP要点概述:五,HTTP的无状态性,持久连接,Cookie

    一,HTTP的无状态性: HTTP 是一种不保存状态,无状态(stateless)协议.HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送过的请求或响 ...

  8. LVSDR模型与持久连接

    LVS之DR模型以及持久连接 LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供任何功能,但是在这框架上提供了能够根 ...

  9. LVS+Nginx(LVS + Keepalived + Nginx安装及配置)

    (也可以每个nginx都挂在上所有的应用服务器)  nginx大家都在用,估计也很熟悉了,在做负载均衡时很好用,安装简单.配置简单.相关材料也特别多. lvs是国内的章文嵩博士的大作,比nginx被广 ...

随机推荐

  1. layui导航栏和layui.layui.msg问题

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Redis详解(二)------ redis的配置文件介绍

    上一篇博客我们介绍了如何安装Redis,在Redis的解压目录下有个很重要的配置文件 redis.conf (/opt/redis-4.0.9目录下),关于Redis的很多功能的配置都在此文件中完成的 ...

  3. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  4. SSRS报表服务随笔(rdl报表服务)-创建一个简单的报表

    这段时间一直在敲rdl报表,在国内的不这么留在,在国外的话,还是挺流行的,国内的话,这方面的资料很少很少,也踏过不少坑 先从SSRS了解起,SSRS全称 SQL Server Reporting Se ...

  5. 抽象工厂模式--java代码实现

    抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...

  6. asp.net core系列 44 Web应用 布局

    一.概述 MVC的视图与Razor页面经常共享视觉和程序元素,通过使用布局来完成,布局还可减少重复代码.本章演示了以下内容的操作方法:(1)使用通用布局,(2)自定义布局,(3) 共享指令,(4)在呈 ...

  7. Java8新特性之一:Lambda表达式

    Java8是自java5之后最重大的一次更新,它给JAVA语言带来了很多新的特性(包括编译器.类库.工具类.JVM等),其中最重要的升级是它给我们带来了Lambda表达式和Stream API. 1. ...

  8. 用wGenerator给编程提速

    1.需求设定 开发语言: java 数据库: mysql 持久化: mybatis 模式: mvc 视图引擎: thymeleaf 前端框架: bootstrap4 用以上的组合来开发一个公告管理的列 ...

  9. Windows核心编程第一章.错误处理

    Windows核心编程第一章,错误处理. 一丶错误处理 1.核心编程学习总结 不管是做逆向,开始做开发.在Windows下.你都需要看一下核心编程这本书.这本书确实写得很好.所以自己在学习这本书的同时 ...

  10. [JavaScript] AMD和CMD概述

    1. cmd 和 amd 在浏览器中,受网络和浏览器渲染的制约,不能采用同步加载,只能采用异步加载.于是 AMD 规范应运而生 2. AMD AMD(Asynchronous Module Defin ...