精华内容
参与话题
问答
  • LVS

    2019-09-03 09:33:35
    LVS 文章目录LVS1.LVS简介2. 三种工作模式的解析2.1 基于NAT的LVS模式负载均衡2.2 基于TUN的LVS负载均衡2.3 基于DR的LVS负载均衡3. LVS负载均衡调度算法 1.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,...

    LVS

    1.LVS简介

    LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式

    在这里插入图片描述

    2. 三种工作模式的解析

    2.1 基于NAT的LVS模式负载均衡

    NAT(Network Address Translation)即网络地址转换,其作用是通过数据报头的修改,使得位于企业内部的私有IP地址可以访问外网,以及外部用用户可以访问位于公司内部的私有IP主机。VS/NAT工作模式拓扑结构如图2所示,LVS负载调度器可以使用两块网卡配置不同的IP地址,eth0设置为私钥IP与内部网络通过交换设备相互连接,eth1设备为外网IP与外部网络联通。

       第一步,用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。
    

    第二步,用户将请求发送至124.126.147.168,此时LVS将根据预设的算法选择后端的一台真实服务器(192.168.0.1~192.168.0.3),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。

    第三步,真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。
    

    在这里插入图片描述

    2.2 基于TUN的LVS负载均衡

    在LVS(NAT)模式的集群环境中,由于所有的数据请求及响应的数据包都需要经过LVS调度器转发,如果后端服务器的数量大于10台,则调度器就会成为整个集群环境的瓶颈。我们知道,数据请求包往往远小于响应数据包的大小。因为响应数据包中包含有客户需要的具体数据,所以LVS(TUN)的思路就是将请求与响应数据分离,让调度器仅处理数据请求,而让真实服务器响应数据包直接返回给客户端。VS/TUN工作模式拓扑结构如图3所示。其中,IP隧道(IP tunning)是一种数据包封装技术,它可以将原始数据包封装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的VIP地址的数据包封装,通过隧道转发给后端的真实服务器(Real Server),通过将客户端发往调度器的原始数据包封装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务器的IP地址及对应端口),LVS(TUN)模式要求真实服务器可以直接与外部网络连接,真实服务器在收到请求数据包后直接给客户端主机响应数据

    在这里插入图片描述

    2.3 基于DR的LVS负载均衡

    在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见

    在这里插入图片描述

    3. LVS负载均衡调度算法

    根据前面的介绍,我们了解了LVS的三种工作模式,但不管实际环境中采用的是哪种模式,调度算法进行调度的策略与算法都是LVS的核心技术,LVS在内核中主要实现了一下十种调度算法。

    1.轮询调度

    轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

    2.加权轮询调度

    加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

    3.最小连接调度

    最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

    (集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

    4.加权最小连接调度

    加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

    5.基于局部的最少连接

    基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。

    6.带复制的基于局部性的最少连接

    带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

    7.目标地址散列调度

    目标地址散列调度(Destination Hashing 简称’DH’)算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。

    8.源地址散列调度U

    源地址散列调度(Source Hashing 简称’SH’)算法先根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且并未超载,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同,它的算法流程与目标地址散列调度算法的基本相似。

    9.最短的期望的延迟

    最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算

    A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。

    10.最少队列调度

    最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

    展开全文
  • lvs

    2019-02-14 16:00:43
    网站加速  也可使用nginx,redis,solr... LVS  ISO⑦层模型 交换机原理 路由器工作原理  路由和交换的对比  lvs模式                   lvs的三种模式的demo;    ...

    网站加速

     也可使用nginx,redis,solr等

     网站服务,流量监控

     监控服务器可以用sigar和GitHub的开源shiro;

    数据连接池druid

     LVS

     ISO⑦层模型

    交换机原理

    路由器工作原理

     路由和交换的对比

     lvs模式

     

     

     

     

     

     

     

     

     

    lvs的三种模式的demo;

     

     

    展开全文
  • LVS初步入门

    2018-09-10 11:15:50
    很多人知道LVS,但可能知之不多,希望阅读本文后,能够对LVS有一个基本的感性认识。  LVS是国内最早出现的自由软件之一,由国防科技大学章文嵩博士在1998年5月创立,章博士目前是淘宝网高级研究员,是淘宝网核心...
  • <div><p>Was excited to see the new LVS functionality and started playing around. When I run LVS macros on flattened cells such as <code>inv.oas</code> via <code>inv.lvs</code> everything runs just ...
  • LVS详解

    千次阅读 2020-10-18 15:18:06
    一、LVS概述 1、LVS简介 LVS,英文全称Linux VirtualServer,Linux虚拟服务器,是一个虚拟服务器集群,由章文嵩博士创建。 使用LVS技术要达到的目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本...

    一、LVS概述

    1、LVS简介

    LVS,英文全称Linux VirtualServer,Linux虚拟服务器,是一个虚拟服务器集群,由章文嵩博士创建。

    使用LVS技术要达到的目标是利用Linux操作系统和LVS集群软件实现一个高可用、高性能、低成本的服务器应用集群;利用LVS技术实现高可用。可伸缩的网络服务,如www服务、cache服务、DNS服务、FTP服务mail服务等。

    2、LVS术语

    Director Server:调度服务器,将负载分发到RealServer的服务器上
    Real Server:真实服务器,真正提供应用服务的服务器
    VIP:虚拟IP地址,公布给用户访问的IP地址
    RIP:真实IP地址,集群节点上使用的IP地址
    DIP:Director连接到RealServer的IP地址

    3、LVS的技术简介

    LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有良好的吞吐量,将请求均衡转移到不同的服务器上执行,且调度器自动屏蔽服务器的故障,从而将一组服务器构成高性能、高可用的虚拟服务器。

    二、LVS体系结构

    使用LVS架设的服务器集群系统有三个组成部分。
    (1)最前端负载均衡层,用LoadBalancer表示
    (2)中间的服务器群组层,用ServerArray表示
    (3)最底层的数据共享存储层,用Share Storage表示。
    在这里插入图片描述

    1、前端负载均衡层

    Load Balancer层,位于整个集群系统的最前端。由一台或多台负载调度器(Director Server)组成,LVS模块就安装在调度器上。调度器的作用类似于路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Array Server层的应用服务器(真实服务器)。同时在调度器上,还要安装对真实服务器服务的监控模块Ldirectord,Ldirectord模块用于检测各个真实服务器的健康状况,在真实服务器不可用时把它从LVS路由表剔除,恢复时重新加入

    Director Server是整个LVS集群系统的核心。Linux2.6的内核默认支持LVS功能

    2、中间服务器群组层

    Array Server层,由一组实际运行的应用服务器/真实服务器组成,真实服务器(Real Server)可以是web服务器,mail服务器,DNS服务器,FTP服务器,视频服务器中的一个或多个。每个真实服务器之间可以通过高速LAN或分布在各地的WAN相连接。在实际应用中,调度器也可以兼任真实服务器的角色。

    3、底层数据共享存储层

       SharedStorage层,为所有Real Server提供共享存储空间和内容一致性的存储区域。在物理上,一般由磁盘阵列设备组成,为了提供内容一致性,一般通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能不是很好,此时可以采用集群文件系统,例如Red Hat的GFS文件系统,oracle提供的OCFS2文件系统。
    

    三、IPVS

    1、IPVS简介

    ipvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术

    2、IPVS作用

    LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件。ipvs安装在调度器上,同时在调度器虚拟出一个虚拟IP(VIP),用户通过这个虚拟IP访问服务,客户的请求到达调度器后,由调度器从Real Server列表中选取一个应用服务器响应客户的请求

    展开全文
  • Lvs抗负载能力强,因为 lvs 工作方式的逻辑是非常之简单,而且工作在网络 4 层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。 有完整的双机热备方案,当节点出现故障时,lvs 会自动判别,所以系统...
  • 还有一些其他选择来帮你解决此问题,就是搭建集群服务器通过整合多台普通的服务器设备并以同一个地址对外提供相同的服务,今天杰哥就带领大家学习企业中常用的一种群集技术——LVS。 文章目录 一、什么是 LVS?...

    前言

    如今,在各种互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求也越来越高,单台服务器也将难以无法承担所有的访问需求。当然了,除了使用性价比高的设备和专用负载分流设备外,还有一些其他选择来帮你解决此问题,就是搭建集群服务器通过整合多台普通的服务器设备并以同一个地址对外提供相同的服务,今天就带领大家学习企业中常用的一种群集技术 —— LVS。

    文章目录

    一、什么是 LVS?
    二、为什么要用 LVS?
    三、LVS 的组成及作用
    四、负载均衡的由来及所带来的好处
    五、LVS 负载均衡集群的类型
    六、DNS / 软硬件负载均衡的类型
    七、LVS 集群的通用体系结构
    八、LVS 负载均衡的基本原理
    九、LVS 负载均衡的三种工作模式
    十、LVS 的十种负载调度算法
    十一、LVS 涉及相关的术语与说明
    参考文献
    总结

    一、什么是 LVS?

    LVS:Linux Virtual Server的简写,也就是Linux 虚拟服务器,是一个虚拟的服务器集群系统,本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。官方网站是 :http://www.linuxvirtualserver.org LVS 实际上相当于基于 IP 地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了高效的解决方法,现在 LVS 已经是 Linux 内核标准的一部分。

    使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储层。

    二、为什么要用 LVS?

    在之前的 Nginx 系列中,介绍了 Nginx 负载均衡服务,详细可参考:《Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡》那为什么还需要用 LVS 呢?

    随着 Internet 的爆炸性增长以及日常生活中的日益重要的作用,Internet 上的流量速度增长,以每年 100% 以上的速度增长。服务器上的工作负载压力也迅速增加,因此服务器在短时间内将会过载,尤其是对于受欢迎的网站而言。为了克服服务器的过载压力问题,有两种解决方案。

    • 一种是:单服务器解决方案,即将服务器升级到性能更高的服务器,但是当请求增加时,将很快过载,因此必须再次对其进行升级,升级过程复杂且成本高;
    • 另一个是:多服务器解决方案,即在服务器集群上构建可扩展的网络服务系统。当负载增加时,可以简单地在群集中添加新服务器或更多服务器以满足不断增长的需求,而商用服务器具有最高的性能/成本比。因此,构建用于网络服务的服务器群集系统更具可伸缩性,并且更具成本效益。

    构建服务器集群的方法:

    • 基于 DNS 的负载均衡集群

    DNS 负载均衡可能是构建网络服务群集的最简单方法。使用域名系统通过将域名解析为服务器的不同 IP 地址来将请求分发到不同的服务器。当 DNS 请求到达 DNS 服务器以解析域名时,DNS 服务器将基于调度策略发出服务器 IP 地址之一,然后来自客户端的请求使用相同的本地缓存名称服务器将在指定的名称解析生存时间(TTL)中发送到同一服务器。

    但是,由于客户端和分层 DNS 系统的缓存特性,很容易导致服务器之间的动态负载不平衡,因此服务器很难处理其峰值负载。在 DNS 服务器上不能很好地选择名称映射的 TTL 值。

    如果值较小,DNS 流量很高,而 DNS 服务器将成为瓶颈;如果值较大,则动态负载不平衡将变得更糟。即使 TTL 值设置为零,调度粒度也是针对每个主机的,不同用户的访问模式可能会导致动态负载不平衡,因为有些人可能从站点中拉出很多页面,而另一些人可能只浏览了几页然后转到远。而且,它不是那么可靠,当服务器节点发生故障时,将名称映射到IP地址的客户端会发现服务器已关闭。

    • 基于分派器的负载平衡集群

    分派器,也称为负载平衡器,可用于在群集中的服务器之间分配负载,以便服务器的并行服务可以在单个IP地址上显示为虚拟服务,并且最终用户可以像单个服务器一样进行交互不知道群集中的所有服务器。与基于DNS的负载平衡相比,调度程序可以按精细的粒度(例如每个连接)调度请求,以实现服务器之间的更好负载平衡。一台或多台服务器发生故障时,可以掩盖故障。服务器管理变得越来越容易,管理员可以随时使一台或多台服务器投入使用或退出服务,而这不会中断最终用户的服务。

    负载均衡可以分为两个级别,即应用程序级别和IP级别。例如,反向代理 和pWEB是用于构建可伸缩Web服务器的应用程序级负载平衡方法。他们将HTTP请求转发到群集中的其他Web服务器,获取结果,然后将其返回给客户端。由于在应用程序级别处理HTTP请求和答复的开销很高,我相信当服务器节点数增加到5个或更多时,应用程序级别的负载均衡器将成为新的瓶颈,这取决于每个服务器的吞吐量服务器。

    LVS 与 Nginx 功能对比
    • LVS 比 Nginx 具有更强的抗负载能力,性能高,对内存和 CPU 资源消耗较低;
    • LVS 工作在网络层,具体流量由操作系统内核进行处理,Nginx 工作在应用层,可针对 HTTP 应用实施一些分流策略;
    • LVS 安装配置较复杂,网络依赖性大,稳定性高。Nginx 安装配置较简单,网络依赖性小;
    • LVS 不支持正则匹配处理,无法实现动静分离效果。Nginx 可实现这方面的功能,具体可参考:《Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理》、《Nginx系列教程(四)| 一文带你读懂Nginx的动静分离》;
    • LVS 适用的协议范围广。Nginx 仅支持 HTTP、HTTPS、Email 协议,适用范围小;

    三、LVS 的组成及作用

    LVS 由两部分程序组成,包括 ipvs 和 ipvsadm。

    1、 ipvs(ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。

    2、 ipvsadm:ipvsadm 是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似 iptables 工具的地位。

    作用:
    • 主要用于多服务器的负载均衡;
    • 工作在网络层,可实现高性能,高可用的服务器集群技术;
    • 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器;
    • 易用,配置简单,有多种负载均衡的方法;
    • 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果;
    • 可扩展性好;

    四、负载均衡的由来及所带来的好处

    在业务刚起步时,一般先使用单台服务器对外进行提供服务。随着后期的业务增长,流量也越来越大。当这单台服务器的访问量越大时,服务器所承受的压力也就越大,性能也将无法满足业务需求,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生。

    我们将采取其他方案,将多台服务器组成集群系统从而来提高整体服务器的处理性能,使用统一入口(流量调度器)的方式通过均衡的算法进行对外提供服务,将用户大量的请求均衡地分发到后端集群不同的服务器上。因此也就有了负载均衡来分担服务器的压力。

    使用负载均衡给我们所带来的好处:提高系统的整体性能、提高系统的扩展性、提高系统的高可用性;

    五、LVS 负载均衡集群的类型

    负载均衡群集:Load Balance Cluster,以提高应用系统的响应能力,尽可能处理更多的访问请求、减少延迟为目标,从而获得高并发、高负载的整体性能。

    高可用群集:High Availability Cluster,以提高应用系统的可靠性,尽可能的减少终端时间为目标、确保服务的连续性,达到高可用的容错效果。

    高性能运算群集:High Performance Computer Cluster,以提高应用系统的 CPU 运算速度、扩展硬件资源和分析能力为目标、从而获得相当于大型、超级计算机的高性能计算能力。

    六、DNS / 软硬件负载均衡的类型

    1)DNS 实现负载均衡

    一个域名通过 DNS 解析到多个 IP,每个 IP 对应不同的服务器实例,就完成了流量的调度,这也是 DNS 实现负载均衡是最简单的方式。

    使用该方式最大的优点:实现简单,成本低,无需自己开发或维护负载均衡设备,不过存在一些缺点:服务器故障切换延迟大,升级不方便、流量调度不均衡,粒度大、流量分配策略较简单,支持的算法较少、DNS 所支持的 IP 列表有限制要求。

    2)硬件负载均衡

    硬件负载均衡是通过专门的硬件设备从而来实现负载均衡功能,比如:交换机、路由器就是一个负载均衡专用的网络设备。

    目前典型的硬件负载均衡设备有两款:F5A10。不过话说,能用上这种硬件负载均衡设备的企业都不是一般的公司,反而普通业务量级小的其他企业基本用不到。

    硬件负载均衡的优点:

    • 功能强大:支持各层级负载均衡及全面负载均衡算法;
    • 性能强大:性能远超常见的软件负载均衡器;
    • 稳定性高:硬件负载均衡,大规模使用肯定是严格测试过的;
    • 安全防护:除具备负载均衡功能外,还具备防火墙、防 DDoS 攻击等安全功能;

    硬件负载均衡的缺点:

    • 价格昂贵;
    • 可扩展性差;
    • 调试维护麻烦;

    3)软件负载均衡

    • Nginx :支持 4 层 / 7 层负载均衡,支持 HTTP、E-mail 协议;
    • LVS :纯 4 层负载均衡,运行在内核态,性能是软件负载均衡中最高的;
    • HAproxy :是 7 层负载均衡软件,支持 7 层规则的设置,性能也不错;

    软件负载均衡的优点:

    • 简单、灵活、便宜(直接在 Linux 操作系统上安装上述所使用的软件负载均衡,部署及维护较简单,4 层 和 7 层负载均衡可根据业务进行选择也可根据业务特点,比较方便进行扩展及定制功能);

    七、LVS 集群的通用体系结构

    第一层:负载调度器:Load Balancer,它是访问整个群集系统的唯一入口,对外使用所有服务器共有的虚拟 IP 地址,也成为群集 IP 地址。

    负载均衡器:是服务器群集系统的单个入口点,可运行 IPVS,该 IPVS 在 Linux 内核或 KTCPVS 内部实现 IP 负载均衡技术,在 Linux 内核中实现应用程序级负载平衡。使用 IPVS 时,要求所有服务器提供相同的服务和内容,负载均衡器根据指定的调度算法和每个服务器的负载将新的客户端请求转发到服务器。无论选择哪个服务器,客户端都应获得相同的结果。使用 KTCPVS 时,服务器可以具有不同的内容,负载均衡器可以根据请求的内容将请求转发到其他服务器。由于 KTCPVS 是在 Linux 内核内部实现的,因此中继数据的开销很小,因此仍可以具有较高的吞吐量。

    第二层:服务器池:Server Pool,群集所提供的应用服务,比如:HTTP、FTP服务器池来承担,每个节点具有独立的真实 IP 地址,只处理调度器分发过来的客户机请求。

    服务器群集的节点可根据系统所承受的负载进行分担。当所有服务器过载时,可添加多台服务器来处理不断增加的工作负载。对于大多数 Internet 服务(例如Web),请求通常没有高度关联,并且可以在不同服务器上并行运行。因此,随着服务器群集的节点数增加,整体性能几乎可以线性扩展。

    第三层:共享存储:Shared Storage,为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个群集的统一性,可使用 NAS 设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器。

    共享存储:可以是数据库系统,网络文件系统或分布式文件系统。服务器节点需要动态更新的数据应存储在基于数据的系统中,当服务器节点并行在数据库系统中读写数据时,数据库系统可以保证并发数据访问的一致性。静态数据通常保存在网络文件系统(例如 NFS 和 CIFS)中,以便可以由所有服务器节点共享数据。但是,单个网络文件系统的可伸缩性受到限制,例如,单个 NFS / CIFS 只能支持 4 到 8 个服务器的数据访问。对于大型集群系统,分布式/集群文件系统可以用于共享存储,例如 GPFS,Coda 和 GFS,然后共享存储也可以根据系统需求进行扩展。

    八、LVS 负载均衡的基本原理

    netfilter 的基本原理

    在介绍 LVS 负载均衡基本原理之前,先说一下 netfilter 的基本原理。因为 LVS 是基于 Linux 内核中 netfilter 框架实现的负载均衡系统,netfilter 其实很复杂也很重要,平时说的 Linux 防火墙就是 netfilter,不过我们操作的还是 iptables,iptables 和 netfilter 是 Linux 防火墙组合工具,是一起来完成系统防护工作的。

    iptables 是位于用户空间,而 Netfilter 是位于内核空间。iptables 只是用户空间编写和传递规则的工具而已,真正工作的还是 netfilter。

    两者间的区别:

    Netfilter 是内核态的 Linux 防火墙机制,它作为一个通用、抽象的框架,提供了一整套的 hook 函数管理机制,提供数据包过滤、网络地址转换、基于协议类型的连接跟踪的功能,可在数据包流经过程中,根据规则设置若干个关卡(hook 函数)来执行相关操作,共设置了 5 个点,包括:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。

    • prerouting: 在对数据包做路由选择之前,将应用此链中的规则;
    • input: 当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
    • forward: 当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则;
    • output: 当防火墙本机向外发送数据包时,将应用此链中的规则;
    • postrouting: 在对数据包做路由选择之后,将应用此链中的规则;

    iptable 是用户层的工具,提供命令行接口,能够向 Netfilter 中添加规则策略,从而实现报文过滤,修改等功能。关于 iPtables 相关文章可参考如下:

    通过下图我们可以来了解下 netfilter 的工作机制:

    当数据包通过网络接口进入时,经过链路层之后进入网络层到达PREROUTING,然后根据目标 IP 地址进行查找路由。

    如目标 IP 是本机,数据包会传到INPUT上,经过协议栈后根据端口将数据送到相应的应用程序;应用程序将请求处理后把响应数据包发送至OUTPUT里,最终通过POSTROUTING`后发送出网络接口。

    如目标 IP 不是本机,并且服务器开启了FORWARD参数,这时会将数据包递送给 FORWARD,最后通过POSTROUTING后发送出网络接口。

    LVS 的基本原理


    LVS 基于 netfilter 框架,工作在 INPUT 链上,在 INPUT 链上注册 ip_vs_in HOOK 函数,进行 IPVS 相关主流程,详细原理概述如下:

    1、 当客户端用户访问 www.baidu.com 网站时,用户访问请求通过层层网络,最终通过交换机进入 LVS 服务器网卡进入内核空间层。

    2、 进入PREROUTING后通过查找路由,确定访问目的 VIP 是本机 IP 地址的话,数据包将进入INPUT链中。

    3、 因为 IPVS 工作在 INPUT 链上,会根据访问的VIP端口判断请求是否为 IPVS 服务,是的情况下,则调用注册的IPVS HOOK 函数,进行IPVS相关流程,并强制修改数据包的相关数据,并将数据包发往POSTROUTING链中。

    4、 POSTROUTING链收到数据包后,将根据目标 IP 地址服务器,通过路由选路,将数据包最终发送至后端真实服务器中。

    上面就是我们所介绍的 LVS 的工作原理,那么 LVS 负载均衡还包括三种工作模式,且每种模式工作原理都有所不同,适用于不同应用场景,其最终目的都是能实现均衡的流量调度和良好的扩展性。

    九、LVS 负载均衡的三种工作模式

    群集的负载调度技术,可基于 IP、端口、内容等进行分发,其中基于 IP 的负载均衡是效率最高的。基于 IP 的负载均衡模式,常见的有地址转换(NAT)、IP 隧道(TUN)和直接路由(DR)三种工作模式。

    地址转换:Network Address Translation,简称:NAT 模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,作为客户机的访问入口,也是各节点回应客户机的访问出口,服务器节点使用私有 IP 地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。


    NAT 实现原理过程

    1、 客户端发出的请求数据包经过网络到达 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。

    **2、**然后进入 PREROUTING 链中,根据目的 IP 查找路由,确定是否为本机 IP 地址,随后将数据包转发至 INPUT 链中,源 IP 和 目的 IP 不变。

    3、 到达 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 来作为后端服务器,数据包的目的 IP 地址将会修改为 RIP,这时并以 RIP 为目的 IP 去查找路由,确定下一跳及 PORT 信息后,数据包将会转发至 OUTPUT 链中。

    4、 被修改过的数据包经过 POSTROUTING 链后,到达 RS 服务器,数据包源 IP 为 CIP,目的 IP 为 RIP。

    5、 RS 服务器经过处理后,将会把数据包发送至用户空间的应用程序,待处理完成后,发送响应数据包,RS 服务器的默认网关为 LVS 的 IP,应用程序将会把数据包转发至下一跳 LVS 服务器,数据包源 IP 为 RIP,目的 IP 为 CIP。

    6、 LVS 服务器收到 RS 服务器响应的数据包后,查找路由,目的 IP 不是本机 IP并且 LVS 服务器开启了 FORWARD 模式,会将数据包转发给它,数据包不变。

    7、 LVS 服务器收到响应数据包后,根据目的 IP 和 目的 PORT 查找相应的服务,这时,源 IP 为 VIP,通过查找路由,确定下一跳信息并将数据包发送至网关,最终回应给客户端用户。

    NAT 模式的优缺点:

    优点:

    • 支持 Windows 操作系统;
    • 支持端口映射,如 RS 服务器 PORT 与 VPORT 不一致的话,LVS 会修改目的 IP 地址和 DPORT 以支持端口映射;

    缺点:

    • RS 服务器需配置网关;
    • 双向流量对 LVS 会产生较大的负载压力;

    NAT 模式的使用场景:

    • 对 windows 操作系统的用户比较友好,使用 LVS ,必须选择 NAT 模式。

    IP 隧道:IP Tunnel,简称:TUN 模式,采用开放式的网络结构,负载调度器作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应给客户机,而不经过负载调度器,服务器节点分散在互联网中的不同位置,有独立的公网 IP 地址,通过专用 IP 隧道与负载调度器相互通信。

    TUN 实现原理过程

    1、 客户端发送数据包经过网络后到 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。

    2、 进入 PREROUTING 链后,会根据目的 IP 去查找路由,确定是否为本机 IP,数据包将转发至 INPUT 链中,到 LVS,源 IP 和 目的 IP 不变。

    3、 到 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 后端服务器, 源 IP 为 DIP,目标 IP 为 RIP,数据包将会转发至 OUTPUT 链中。

    4、 数据包根据路由信息到达 LVS 网卡,发送至路由器网关,最终到达后端服务器。

    5、 后端服务器收到数据包后,会拆掉最外层的 IP 地址后,会发现还有一层 IP 首部,源 IP 为 CIP,目的 IP 为 VIP,TUNL0 上配置 VIP,查找路由后判断为本机 IP 地址,将会发给用户空间层的应用程序响应后 VIP 为源 IP,CIP 为目的 IP 数据包发送至网卡,最终返回至客户端用户。

    TUN 模式的优缺点:

    优点:

    • 单臂模式,LVS 负载压力小;
    • 数据包修改小,信息完整性高;
    • 可跨机房;

    缺点:

    • 不支持端口映射;
    • 需在 RS 后端服务器安装模块及配置 VIP;
    • 隧道头部 IP 地址固定,RS 后端服务器网卡可能会不均匀;
    • 隧道头部的加入可能会导致分片,最终会影响服务器性能;

    TUN 模式的使用场景:

    • 如对转发性要求较高且具有跨机房需求的,可选择 TUN 模式。

    直接路由:Direct Routing,简称 DR 模式,采用半开放式的网络结构,与 TUN 模式的结构类似,但各节点并不是分散在各个地方,而是与调度器位于同一个物理网络,负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道。它是最常用的工作模式,因为它的功能性强大。

    DR 实现原理过程

    1、 当客户端用户发送请求给 www.baidu.com 网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过网络到百度 LVS 负载均衡服务器,这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。

    2、 数据包到达网卡后,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。

    3、 数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务,如是定义过的 VIP 服务,会根据配置的服务信息,从 RealServer 中选择一个后端服务器 RS1,然后 RS1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 INET_HOOK 到 OUTPUT 链中。

    4、 数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 RealServer 服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 与 RS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 RealServer 服务器。

    5、 数据包到达 RealServer 服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。 此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 RS1 的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 RS 相连的路由器转发给客户端。

    DS 模式的优缺点:

    优点:

    • 响应数据不经过 LVS,性能高;
    • 对数据包修改小,信息完整性好;

    缺点:

    • LVS 与 RS 必须在同一个物理网络;
    • RS 上必须配置 lo 和其他内核参数;
    • 不支持端口映射;

    DS 模式的使用场景:

    • 对性能要求高的,可首选 DR 模式,还可透传客户端源 IP 地址。

    NAT 模式:只需一个公网 IP 地址,是最易用的一种负载均衡模式,安全性较好。
    TUN 模式 和 DR 模式:负载能力强大、适用范围广、节点安全性较差。

    十、LVS 的十种负载调度算法

    轮询:Round Robin,将收到的访问请求按顺序轮流分配给群集中的各节点真实服务器中,不管服务器实际的连接数和系统负载。

    加权轮询:Weighted Round Robin,根据真实服务器的处理能力轮流分配收到的访问请求,调度器可自动查询各节点的负载情况,并动态跳转其权重,保证处理能力强的服务器承担更多的访问量。

    最少连接:Least Connections,根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数少的节点,如所有服务器节点性能都均衡,可采用这种方式更好的均衡负载。

    加权最少连接:Weighted Least Connections,服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大的活动连接负载。

    基于局部性的最少连接:LBLC,基于局部性的最少连接调度算法用于目标 IP 负载平衡,通常在高速缓存群集中使用。如服务器处于活动状态且处于负载状态,此算法通常会将发往 IP 地址的数据包定向到其服务器。如果服务器超载(其活动连接数大于其权重),并且服务器处于半负载状态,则将加权最少连接服务器分配给该 IP 地址。

    复杂的基于局部性的最少连接:LBLCR,具有复杂调度算法的基于位置的最少连接也用于目标IP负载平衡,通常在高速缓存群集中使用。与 LBLC 调度有以下不同:负载平衡器维护从目标到可以为目标提供服务的一组服务器节点的映射。对目标的请求将分配给目标服务器集中的最少连接节点。如果服务器集中的所有节点都超载,则它将拾取群集中的最少连接节点,并将其添加到目标服务器群中。如果在指定时间内未修改服务器集群,则从服务器集群中删除负载最大的节点,以避免高度负载。

    目标地址散列调度算法:DH,该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    源地址散列调度算法:SH,与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

    最短延迟调度:SED,最短的预期延迟调度算法将网络连接分配给具有最短的预期延迟的服务器。如果将请求发送到第 i 个服务器,则预期的延迟时间为(Ci +1)/ Ui,其中 Ci 是第 i 个服务器上的连接数,而 Ui 是第 i 个服务器的固定服务速率(权重) 。

    永不排队调度:NQ,从不队列调度算法采用两速模型。当有空闲服务器可用时,请求会发送到空闲服务器,而不是等待快速响应的服务器。如果没有可用的空闲服务器,则请求将被发送到服务器,以使其预期延迟最小化(最短预期延迟调度算法)。

    十一、LVS 涉及相关的术语及说明

    上述内容中涉及到很多术语或缩写,这里简单解释下具体的含义,便于理解。

    • DS: Director Server,前端负载均衡节点服务器。
    • RS: Real Server,后端真实服务器。
    • CIP: Client IP,客户端 IP 地址。
    • VIP: Virtual IP,负载均衡对外提供访问的 IP 地址,一般负载均衡 IP 都会通过 Virtual IP 实现高可用。
    • RIP: RealServer IP,负载均衡后端的真实服务器 IP 地址。
    • DIP: Director IP,负载均衡与后端服务器通信的 IP 地址。
    • CMAC: 客户端 MAC 地址,LVS 连接的路由器的 MAC 地址。
    • VMAC: 负载均衡 LVS 的 VIP 对应的 MAC 地址。
    • DMAC: 负载均衡 LVS 的 DIP 对应的 MAC 地址。
    • RMAC: 后端真实服务器的 RIP 地址对应的 MAC 地址。

    Reference

    http://www.linuxvirtualserver.org/
    http://www.linuxvirtualserver.org/how.html
    http://www.linuxvirtualserver.org/Documents.html

    总结

    回顾下,通过本文你可学习到什么是 LVS、为什么要用 LVS、LVS 的组成及作用、负载均衡的由来及所带来的好处、LVS 负载均衡集群的类型(负载均衡集群、高可用集群、高性能运算集群)、DNS 实现负载均衡 / 硬件和软件的负载均衡 、LVS 负载均衡的通用体系结构(负载调度器、服务器池、共享存储)、LVS 负载均衡的基本原理及基于netfilter 的基本原理和工作机制、LVS 负载均衡的三种工作模式(NAT、TUN、DR)LVS 十种负载均衡调度算法(RR、WRR、LC、WLC、LBLC、LBLCR、DH、SH、SED、NQ)以及相关涉及到的 LVS 术语及说明等;


    原创不易,码字不易。 觉得这篇文章对你有点用的话,麻烦你为本文点个赞留言转发一下,因为这将是我输出更多优质文章的动力,感谢!

    ⬇⬇⬇⬇⬇⬇⬇⬇

    展开全文
  • Linux虚拟服务器(Linux Virtual Server,LVS)技术是一种广泛应用于企业集群中的负载均衡技术,目前关于LVS的研究主要是基于Web服务器集群负载均衡性能方面。在一些实际应用场景中,LVS可以直接与数据库集群相结合...
  • lvs全文

    2020-09-24 22:05:44
    一、LVS介绍 简介 LVS是Linux Virtual Server的简称,即Linux虚拟服务器,创始人前阿里云首席科学家章文嵩博士(现已经在滴滴),官方网站:www.linuxvirtualserver.org。从内核版本2.4开始,已经完全内置了LVS的...
  • LVS负载集群笔记
  • LVS 之 集群搭建

    2020-02-02 20:19:54
    一个用于客户端,一个用于LVS 调度器, 2个用于后端服务器 LVS-NAT配置 1、zk02 开启内核的核心转发功能,将ip_forward的设置为1 [root@zk02 ~]# echo 1 > /proc/sys/net/ipv4/ip_f...

空空如也

1 2 3 4 5 ... 20
收藏数 24,613
精华内容 9,845
关键字:

lvs