1.LVS的介绍:

  LVS服务器全称为Linux Virtual Server,由章文嵩博士开发。LVS工作在TCP/IP协议栈上(netfilter/input链上),根据IP/PORT实现数据包的转发、调度,并且能够根据不同的算法,实现调度策略。

  注:由于LVS工作在netfilter/input链上,所以无法和IPTABLES同时使用。


2.为什么要使用LVS?

  由于互联网人数的直线式增长,导致了WEB服务器资源占用量的急剧增加,这时会出现硬件资源不够用的情况下,此时要想继续为用户提供服务,就必须对硬件资源进行扩充。要么纵向对硬件服务器进行升级(甚至是更换硬件),要么横向扩展增加服务器的数量。然而对硬件服务器进行升级通常是有限的,此时就只能考虑第二种方式,增加服务器的数量。

  打个比方:A公司有一个网站,最开始有2000名用户,同时在线最高有1600人,服务器完全应付的过来。但是后来他们对论坛做推广,用户数骤增到4000名,当在线人数高于2000人服务器就会直接挂掉。于是团队对服务器进行硬件升级,增加了3个CPU,16G内存,此时服务器已经达到部件升级的顶级,但是仍然无法应付。这时有了三个方案:

  (1)买一台更高级的,把旧的替换掉;

  (2)买一台同样的配置的服务器,对其做负载均衡;

  (3)买一台更高级的,新旧同时做负载均衡;

  这三个方案中,作为老板来讲很显然是最后两个更容易接受。假设A公司选择了第二或第三种方案,并且两台服务器提供了同样的资源,此时如何让用户访问一个域名时能分配到不同的服务器?比较简单的可以做DNS负载均衡,不过,这种负载均衡仅能提供IP的轮流解析,无法实现更高级的算法,当其中一台服务器的用户活跃度比另一台高的时候,就代表你的负载均衡失效,如果不幸挂掉后果可想而知。

  这时就需要LVS了,正如第一段所述,LVS不仅仅可以根据IP/PORT实现负载均衡,还可以根据不同的算法实施不同的调度策略,所以其应用场景更加广泛,并且他工作于Linux的内核中,占用资源非常的少,但是效率非常的高。


3.LVS的两个模块:

  LVS提供两个模块,ipvsadm和ipvs,ipvs类似于netfilter,是一个规则的实施模块,ipvsadm是一个规则的配置工具,需要用户自行安装。


4.LVS的算法:

  算法,就是解决问题的步骤。LVS根据为其配置的调度算法对数据进行分发。LVS有10种调度算法,从而实现不同场景、不同需求的负载调度机制。

 大体可分为两种:

  4.1 固定调度:不考虑后端服务器的状态因素(例如活动连接数),按照规则对数据进行分发。

    4.1.1 rr:轮询,对后端服务器轮流进行数据分发。

    4.1.2 wrr:加权轮询,根据权重对后端服务器进行数据分发。

    4.1.3 sh:源地址hash,将相同客户端请求分给上次相同的Real Server,实现会话绑定

    4.1.4 DH:目标地址hash,将同一个目标IP地址的请求发送给同一个Server,类似于sh,应用于Cache服务器。

  4.2 动态调度:考虑后端服务器的状态因素,并依照其状态进行计算实现策略分发。

    4.2.1 lc:最少连接:

    active*256+inactive;哪台服务器的值小分发给谁;结果一样按IP规则选项;

    4.2.2 wlc:加权最少连接:

    (active*256+inactive)/weigth;哪台服务器值小分发给谁;所有服务器结果一样按IP排序选项;

    4.2.3 sed:最短的期望的延迟;解决了wlc的计算结果一样时,按IP排序的问题,

    (active+1)*256/weight

    4.2.4 nq:永不排队;改进的sed,上来先轮询一遍,之后进行计算,避免权重高的服务器处理太多请求,而其他服务器空闲;

    (actvie+1)*256/weight

    4.2.5 lblc:基于本地的最少连接;

    尽可能的将同一个目标IP的请求发送给同一个服务器;

    4.2.6 lblcr:基于本地的带复制功能的最少连接

    Cache服务器共享缓存数据,尽可能的将同一个目标IP地址的请求发送给主Cache Server。

  LVS的默认调度算法是wlc,请求数量非常大的收获,非活动连接(inactive)不能忽略。


5.LVS的三种工作模式:NAT、DR、TUN及注意事项

  5.1 NAT:地址转换,多目标DNAT

  NAT模式。此模式中,LVS位于Client与Real Server之间,LVS需要处理Client请求与Real Server响应请求。大致流程、逻辑架构如下:

LVS负载均衡服务基本介绍_服务器

  我们总结一下NAT特性:

    1.所有数据经由LVS转发并做地址转换
    2.集群节点必须和Director在同一网络中(real server网关需指向DIP,所以要在同一网络中)
    3.real server网关必须指向DIP(所有数据经由LVS转发,所以必须指向DIP)
    4.real server可以配置私网、公网地址
    5.Director可以做端口映射

    6.real server可以使用任何操作系统

  NAT模式的缺点:

    由于所有数据包都需要经由LVS转换NAT并转发,所以会导致LVS服务器繁忙的处理NAT操作,导致分发(调度)计算能力下降,易成为瓶颈。所以此模式并不适合生产环境使用,但是面试的时候很可能会问到其特性,最好可以记一记。


  5.2 DR:直接路由

  DR模式。此模式中,LVS位于Client与Real Server之间,不过LVS仅处理Client请求。大致流程、逻辑架构如下

LVS负载均衡服务基本介绍_LVS_02

  注:LVS是配置的Real Server的IP地址,是RIP,而不是VIP。当数据包来的时候,LVS计算并分配一台服务器,然后得到其RIP,发起ARP广播,获取到RIP的MAC,将这个包发送出去。当Real Server接收到的时候,他发现目标地址是VIP,而恰巧VIP自己也有配置,所以就处理了!

  我们总结一下DR特性:

    1.Director只负责请求报文
    2.Director必须和Real Server在同一物理网络中(因为请求是由MAC地址分发的)
    3.RIP可以配置为公网地址,实现远程管理
    4.Director通过MAC来实现分发请求到Real Server
    5.Director不能做端口映射、Real Server的网关不能指向Director
    6.需要拒绝Real Server的对VIP的ARP应答。


  5.3 TUN:隧道模式

  TUN模式。此模式中,LVS位于Client与Real Server之间,与DR一样,LVS仅处理Client请求。大致流程、逻辑架构如下:

LVS负载均衡服务基本介绍_服务器_03


  我们总结一下TUN特性:

    1.Director可以和Real Server不在同一网络中
    2.Director只接收请求报文
    3.Director通过重新封装IP首部进行请求分发
    4.生产环境中,不同IDC机房的情况下,RIP必须为公网地址
    5.Real Server必须是支持TUN的操作系统


最后附一张特性图:


LVS负载均衡服务基本介绍_服务器_04