Lvs集群的通用结构

  Lvs集群采用IP负载均衡技术,属于IP层的交换(L4),具有很好的吞吐率。调度器分析客户端到服务器的IP报头信息,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器,Lvs集群系统的通用结构如下所示,主要包含四大部分:

  负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务来自一个IP地址上的。当客户请求到达时,调度器只根据负载情况从服务器池选出一个服务器,将请求转发到选出的服务器。因为所有的操作都是在操作系统核心空间中完成,它的调度开销很小,所以具有很小的吞吐率。

  服务器池(server pool),是一组真正执行客户请求的服务器,执行的任务有WEB、MAIL、FTP和DNS等。服务器池的节点数目是可变的,当整个系统收到的负载超过目前所有站点的处理能力时,可以在服务器池中添加服务器来满足不断增长的请求负载。对大多数网站来说,节点与节点之间不存在很强的相关性,所以整个系统的性能可以随着服务器池的节点数目增加而线性增长。

  后端存储(backend storage),它为服务器池提供一个共享的存储区,这样使得服务器池拥有相同的内容,提供相同的服务。

  Graphic Monitor是为系统管理员提供整个集群系统的监视器,它可以监视系统中每个节点的状况。

IP负载均衡技术

在已有的IP负载均衡技术中有三种:

  一、是通过网络地址转换实现虚拟服务器的VS/NAT技术(Virtual Server via Network Address Translation)

  二、是通过直接路由的VS/DR技术(Virtual Server via Direct Routing)

  三、是通过IP隧道实现虚拟服务器的VS/TUN技术

通过NAT实现虚拟服务器(VS/NAT),请求,响应都在负载均衡器中完成

  VS/NAT的体系结构如下图所示,在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的

  1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求

  2、Load Balancer的外网(eth0)收到该次请求

    

  3、IPVS调度器根据各个Real Server的负载情况,动态选择一台Real Server(例如:172.16.81.144),将请求报文的目标地址改写发送给172.16.81.144

    

  4、Real Server收到请求报文并处理形成响应文本,由于Real Server上的网关地址为Load Balaceer,响应报文从Real Server发往Load Balaceer。

    

  5、Load Balacer收到172.16.81.144的响应报文后,将响应报文的原地址修改为虚拟IP地址,并发送给客户端。

    

  6、客户认为得到正常的服务,而不知道是哪一台服务器处理的。

通过直接路由实现虚拟服务器(VS/DR)

  在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器数目在10-20之间时,负载调度器将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载均衡器中只负责调度请求而响应直接返回给客户,将极大提升提高整个集群系统的吞吐量。VS/DR体系结构如下图所示:调度器和服务器都必须在物理上有一个网卡通过不分断的局域网连接,如通过交换机或者高速的HUB连接。VIP地址为调度器和服务器组共享,调度器设置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面不可见,只是用于处理目标地址为VIP请求。

  总结:负载只负责调度,响应直接返回给用户,负载和服务器必须在物理上通过网卡通过不分断的局域网连接,负载地址对外可见,服务器池地址对外不可见。

  1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求

  2、Load Balacer的外网(eth0)收到该次请求

    

  3、IPVS调度器根据各个Real Server的负载情况,动态的选择一台Real Server,将请求报文转发到Real Server(如下的地址)

    

  4、Real Server的内网(eth1)接收到Load Balacer发过来的IP报文并对IP报文解包,得到客户的请求包,发现包的目标地址被配置在本地的lo设备上,所以就处理这个请求

  5、Real Server根据路由表将响应报文通过外网(eth0)直接返回给用户,请求报文的目标地址改为VIP,响应报文的源地址也为VIP,所以响应报文不需要做任何修改,直接返回给客户

    

  6、客户认为得到正常服务,而不知道是哪一台服务器处理的。

  在VS/DR响应报文根据服务器的路由表直接返回给用户,而不经过负载调度器,所以负载调度器只处于从客户到服务器的半连接中,我们给出半连接的TCP有限状态机。如下图为VS/DR的TCP状态转移,圈表示状态,箭头表示状态间的转换,箭头上的标识表示在当前状态上收到该标识的输入,迁移到下一个状态。VS/DR的TCP状态迁移是按照半连接的TCP有限状态机进行的。

通过IP隧道实现虚拟服务器(VS/TUN)

  跟VS/DR方法相同,VS/TUN多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将相应发送给客户,可以极大地提高整个集群系统的吞吐量。IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。

  利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给用户。但在这里,后端服务器有一组而非一个,所以不可能静态地建立一一对应的隧道。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。

  1、客户端浏览器输入58.251.62.141向58.251.62.141发出http请求

  2、Load Balacer的外网(eth0)收到请求

    

  3、IPVS动态选择一台服务器,将请求报文封装在另一个IP报文中

  4、Load Balacer的内网(eth1)将封装后的IP报文发送给Real Server

    

  5、Real Server的内网(eth1)收到Load Balacer发过来的IP报文并对IP报文解包,得到客户端请求,发现包的目标地址被配置在本地的IP隧道设备上,所以就处理这个请求。

  6、Real Server根据路由表将响应报文通过外网(eth0)直接返回给客户,请求报文的目标地址为VIP,响应报文的原地址也为VIP,所以报文不需要修改直接发送给客户。

    

  7、客户得到正常的服务,而不知道是哪一台服务器处理的。

  VS/DR负载调度器也只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。

  1. VS/NAT 的优点是服务器可以运行任何支持 TCP/IP 的操作系统,它只需要一个 IP 地址配置在调度器上,服务器组可以用私有的 IP 地址。缺点是它的伸缩能力有限,当服务器结点数目升到 20 时,调度器本身有可能成为系统的新瓶颈,因为在 VS/NAT 中请求和响应报文都需要通过负载调度器。
  2. VS/DR 优点是负载调度器可以处理大量的请求, 因为调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户, 这可以极大地提高 LVS 集群系统的伸缩性。 缺点是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作 ARP 响应,或者能将报文重定向(Redirect)到本地的 Socket 端口上。
  3. VS/TUN 的优点是负载调度器可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈,因为负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。缺点是 VS/TUN 技术有 IP 隧道的开销并且对服务器有要求,即所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议。
  4.  
  5. FULLNAT模式(淘宝开源)

解决了上述三种的缺点,解决了真实服务器能跨越 VLAN 通讯,只需要连接到内网即可
入站时,目标 IP 更改为真实服务器的 IP,源 IP 更改为内网的本地 IP(一组内网 IP)
出站时,目标 IP 更改为客户端的 IP,源 IP 更换为 VIP

Lvs IP负载均衡技术的更多相关文章

  1. 转载-lvs官方文档-LVS集群中的IP负载均衡技术

    章文嵩(wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT.VS/TUN ...

  2. LVS集群中实现的三种IP负载均衡技术

    LVS有三种IP负载均衡技术:VS/NAT,VS/DR,VS/TUN. VS/NAT的体系结构如图所示.在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的.这些服务器 提供相同的网络服 ...

  3. LVS集群中的IP负载均衡技术

    LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 转自LVS官方参考资料 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集 ...

  4. IP负载均衡技术

    参考链接:http://www.360doc.com/content/12/1117/19/820209_248442094.shtml

  5. LVS+keepalived负载均衡

    背景:         随着你的网站业务量的增长你网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高 ...

  6. IP负载均衡

    推荐一篇关于LVS的好文: https://www.cnblogs.com/gaoxu387/p/7941381.html 一.原博主要内容: 1.概述 IP负载均衡:四层负载,是基于IP+端口的负载 ...

  7. 亿级PV请求的三种负载均衡技术

    在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人.一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的.这时候就需要用负载均衡 ...

  8. 160526、高并发之LVS搭建负载均衡

    LVS介绍: LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内核2.6中,它已经成为内核的一部分,在此之前的内 ...

  9. 基于LVS的负载均衡实现

    一 什么是负载均衡 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务 ...

随机推荐

  1. CocoaPods安装/更新报错While executing gem ... (OpenSSL::SSL::SSLError)解决方案

    今天给新买的MacBook Pro更新CocoaPods,结果上来就报错,出师不利. HeinocdeMacBook-Pro:~ Heinoc$ sudo gem update --system Pa ...

  2. validator 参数校验的常用注解

    @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 ...

  3. nodemon 的坑

    1. 我的系统是ubuntu18.04.2 的 在使用过程中不知道什么为题 nodemon 运行的项目不在前台打印了项目, 我监听的端口 9302 一直在运行, 前台看不到 我想停止掉用 ps -ef ...

  4. JavaScript中的一些小技巧

    js 数字操作:1.1 取整:取整有很多方法如: parseInt(a,10); Math.floor(a); a>>0; ~~a; a|0; 前面2种是经常用到的,后面3种算是比较偏的, ...

  5. Computer2

    luo@luo-All-Series:~/MyFile/TensorflowProject$ conda create -n flappbird1 python=3.7Solving environm ...

  6. SVM之SMO算法(转)

    支持向量机(Support Vector Machine)-----SVM之SMO算法(转) 此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimizat ...

  7. [GO]接口的嵌用继承

    package main import "fmt" type Humaner interface { SayHi() } type Personer interface { Hum ...

  8. win7设置开机启动virtualBOX虚拟机

    如果常用VirtualBox虚拟机系统的话,设置随开机启动也是很方便的.不需要打开VirtualBox窗口,直接启动VirtualBox虚拟机系统就可以了. 设置开机自启动VirtualBox虚拟机系 ...

  9. 公众号js-sdk简

    后台代码 jssdk.PHP——因sae的不可写环境,故需要将accesstoken和JsApiTicket存入数据库. 数据库字段:id(int 3),accesstoken(string 255) ...

  10. Can't place multiple pins assigned to pin location Pin_F16

    Can't place multiple pins assigned to pin location Pin_F16 在我们芯航线FPGA开发板上,使用了一片128Mbit的SDRAM存储器.当大家在 ...