青蛙学Linux—高性能负载均衡集群软件LVS

LVS,即Linux Virtual Server的简写,是目前很是流行的一款实现负载均衡集群的软件。该项目在1998年5月由章文嵩博士成立,是中国国内最先出现的自由软件项目之一。LVS官网http://www.linuxvirtualserver.org/html

一、LVS体系架构

LVS负载均衡集群由三部分组成:最前端的负载均衡层,即Load Balancer;中间的服务器群组层,即Server Array;最后端的数据共享存储层,即Shared Storage。在用户看来,全部的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。前端

  • Load Balancer:位于整个集群的最前端,由一台或多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,Director Server的做用相似于一个路由器,它含有完成LVS功能所须要的路由表,经过这些路由表把用户的请求分发给Server Array的应用服务器(Real Server)。同时,在Director Server上还要安装监控模块Ldirectord,用于监控后端Real Server的健康情况,在Real Server不可用时将其从LVS的路由表中剔除,恢复时从新加入;Director Server是整个LVS的核心,操做系统只支持Linux或FreeBSD,Linux从2.6内核起不用从新编译就能够支持LVS功能
  • Server Array:由一组实际运行的应用服务器(Real Server)组成,每一个Real Server之间经过高速的LAN或分布在各地的WAN相连,在实际应用中Director Server也能够同时兼任Real Server的角色;对于Real Server,能够是任意平台的操做系统,如Linux、Windows、AIX等
  • Shared Storage:为全部的Real Server提供共享存储空间和内容一致性的存储区域。在物理上,通常由磁盘阵列设备组成;为了提供内容的一致性,通常能够经过NFS进行数据共享,但NFS在繁忙的业务系统中性能并非很好,此时能够采用集群文件系统,如RedHat的GFS、Oracle的OCFS2等

整个架构具体以下图所示:linux

1

二、LVS IP负载均衡机制的实现

负载均衡技术有多种实现方案,如基于DNS域名轮流解析的方法、基于客户端调度访问的方法、基于应用层系统负载的调度方法、基于IP地址的调度方法。在这些调度方法中,基于IP地址的方法是执行效率最高的。web

LVS的IP负载均衡技术是经过IPVS模块来实现的,IPVS是LVS的核心模块。算法

在LVS中,访问请求首先通过VIP到达负载均衡调度器,而后由负载均衡调度器从Real Server列表中选取一个Real Server响应用户的请求。Real Server如何将请求的数据返回给用户,是IPVS实现的重点,IPVS实现负载均衡的机制有如下几种:shell

2.一、DR模式

DR即Virtual Server via Direct Routing,使用直接路由技术实现虚拟服务器。VS/DR经过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户端。这种调度方式的性能是最好的。DR模式架构以下图所示:后端

2

  • DR模式是经过在负载均衡调度器LB上修改数据包的目的MAC地址实现转发。所以数据包来源地址保持不变,目的地址仍然是VIP
  • 请求的报文通过LB,然后端RS响应处理后的报文无需通过LB,所以并发访问量大时效率很高(与NAT模式相比)
  • 由于DR模式经过MAC地址改写机制实现转发,所以全部RS和LB只能在一个局域网中
  • RS上须要绑定VIP地址到lo接口上,而且须要配置ARP抑制
  • RS的默认网关不须要配置成LB,而是直接配置为上层路由网关,只要能让RS直接与客户端通信便可
  • 因为DR模式的LB仅做MAC地址改写,因此LB就不能改写目标端口,那么RS就能使用和VIP相同的端口提供服务

2.二、NAT/FULL NAT模式

NAT,即Virtual Server via Network Address Translation,使用网络地址翻译技术实现虚拟服务器。当用户的请求到达LB时,LB将请求报文的目的地址改为选定的RS地址,同时将报文的目标端口也改为选定的RS的相应端口;RS将返回的数据提交给LB,LB再将报文源地址和源端口修改为VIP和相应的端口后将数据返回给用户,完成整个负载调度过程。NAT/FULL NAT模式架构以下图所示:服务器

3

  • NAT模式不须要LB和RS在同一个网段
  • NAT模式将请求的报文和响应的报文都通过LB进行转发和地址改写,所以访问量大时,LB有较大的瓶颈,通常一台LB最多只能带10-20台RS
  • 只须要在LB上配置一个公网IP便可
  • 每台RS的网关地址必须是LB的IP
  • 支持IP地址和端口的转换,即前端LB和后端RS提供服务的端口能够不一致
  • LB节点上必须开启数据转发功能,不然返回的数据没法到达客户端。在Linux下使用如下方法打开数据转发功能
    # 在/etc/sysctl.conf中添加如下内容
    net.ipv4.ip_forward = 1    # 值为0表示不开启转发功能,1表示开启转发功能
    # 修改完成后执行如下命令使配置生效
    sysctl -p
FULL NAT与NAT的区别

FULL NAT与NAT的区别主要在对报文的处理方面:网络

  • FULL NAT在客户端请求VIP时,不只替换了报文中的目的IP,还替换了源IP;VIP返回给客户端时也替换了源IP
  • FULL NAT由于要替换源IP因此性能比NAT降低10%

2.三、TUN模式

TUN,即Virtual Server via IP Tunneling,经过IP隧道技术实现虚拟服务器。LB采用IP隧道技术将用户的请求转发到某个RS,RS直接将数据返回给用户,不须要再通过LB。在TUN模式中,LB与RS不须要在同一个网段;同时LB只处理用户请求报文,使得集群吞吐量大大提升。TUN模式架构以下图所示:架构

4

  • TUN模式中LB和RS之间的传输不须要修改报文,而是经过单独创建的IP隧道传输
  • TUN模式必须在全部的RS上绑定VIP
  • TUN模式使用IP隧道,在增长了运维方面的难度

三、LVS的负载调度算法

LVS的负载调度算法能够分为静态和动态两种。静态算法是仅根据算法进行调度,而不考虑后端RS的实际链接和负载状况;动态算法能够根据后端RS的实际链接和负载来进行请求调度。

静态算法有四种,分别是RR、WRR、DH和SH。

  • RR轮询算法:LB将请求按照顺序轮流分配到后端RS,它均等对待后端每一台RS,适用于后端RS节点处理性能差很少的场景
  • WRR加权轮询算法:LB根据RS的权重分配任务
  • DH目的地址哈希调度算法:以目的IP地址为关键字查找一个静态哈希表来获取须要的RS
  • SH源地址哈希调度算法:以源IP地址为关键字查找一个静态哈希表来获取须要的RS

动态算法有六种,分别是LC、WLC、SED、NQ、LBLC和LBLCR

  • LC最少链接算法:LB将请求动态的调度到已创建链接最少的后端RS上。在后端RS性能相近的状况下适用该算法能够较好的平衡负载
  • WLC加权最少链接算法:在LC的基础上根据权重来将请求动态的调度到后端的RS上,用于在后端RS性能相差较大的环境中
  • SED最短延迟调度算法:基于WLC算法。若是ABC三台RS的权重分别为一、二、3,则使用SED时会进行如下计算,A - (1+1)/1;B - (2+1)/2;C - (3+1)/3,LB会将请求交给运算结果最小的RS
  • NQ永不排队/最少队列算法:无需排队,若是有RS的链接数为0则直接将请求调度给该RS而不进行SED计算
  • LBLC基于地址的最小链接数调度算法:未来自同一个目的IP地址的请求分配给同一台RS,若是该RS的负载已满,则将请求分配给链接数最小的RS,并将该RS作为下一次分配的首选RS
  • LBLCR带复制的基于地址的最小链接数调度算法:与LBLC不一样的是,该算法维护的是从同一个目的IP地址到一组RS的映射,请求的RS会从该组RS中选择得出
经常使用服务 调度算法
Web、mali、MySQL RR、WLC、WRR
web cache、DB cache LBLC、LBLCR
防火墙集群 SH、DH
相关文章
相关标签/搜索