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有限状态机进行状态迁移。

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

    CString的构造函数CString( );例:CString csStr; CString( const CString& stringSrc );例:CString csStr(&quo ...

  2. Hibernate核心API

    ------------------------siwuxie095 (一)Configuration 1.一般情况 或: 加载核心配置文件:在 src 下找到名称为 Hibernate.cfg.xm ...

  3. C++ split

    /*************************************************Function: splitDescription: 根据空格切分字符串Calls: // 被本函 ...

  4. [Plan]计划

    1. scala 2. kafka 1. lua 2. openResty 1. 日志收集 - python 2. 代码生成 3. 权限系统

  5. ECS 游戏架构 应用

    转载自:http://blog.csdn.net/i_dovelemon/article/details/30250049 如何在cocos2d-x中使用ECS(实体-组件-系统)架构方法开发一个游戏 ...

  6. html5标签---不常用新标签的整理

    状态标签 meter 用来显示已知范围的标量值或者分数值. value:当前的数值. min:值域的最小边界值.如果设置了,它必须比最大值要小.如果没设置,默认为0 max:值域的上限边界值.如果设置 ...

  7. idea 删除代码的注释

      搜索栏使用 正则表达式搜索 (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/|[ \t]*//.*)   会搜索出来所有注释的代码 用空格replace替换掉就 ...

  8. 创建EDM

    在学习linq过程中,我们难免会要创建EDM,这里简单的介绍一下EDM的创建过程 图示如下: 1.右击→添加→新建项→数据→Ado.net实体数据模型 选择适当的数据库,表后点击完成,vs中会自动生成 ...

  9. 深入理解java虚拟机(十四)正确利用 JVM 的方法内联

    在IntelliJ IDEA里面Ctrl+Alt+M用来拆分方法.选中一段代码,敲下这个组合,非常简单.Eclipse也用类似的快捷键,使用 Alt+Shift+M.我讨厌长的方法,提起这个下面这个方 ...

  10. cortex m0启动代码详解

    转自:http://www.cnblogs.com/mddblog/p/4920063.html 阅读目录 概述 1.堆栈空间定义 2.存放中断向量表 3. 复位中断函数(Reset_Handler) ...