Linux负载均衡解决方案 -- LVS 理论概述

Lvs 理论概述

一、什么是 LVS ?

什么是 LVS

LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的*软件项目。
LVS是在真实服务器集群上构建的高度可扩展且高度可用的服务器,负载平衡器在Linux操作系统上运行。服务器群集的体系结构对最终用户完全透明,并且用户进行交互就像是一台高性能虚拟服务器一样。
Linux虚拟服务器是一种高级负载平衡解决方案,可用于构建高度可扩展且高度可用的网络服务,例如可扩展的Web,缓存,邮件,ftp,媒体和VoIP服务。

使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

官方站点:www.linuxvirtualserver.org

LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

二、为什么需要 LVS ?

随着Internet的爆炸性增长及其在我们生活中日益重要的作用,Internet上的流量正以惊人的速度增长,并以每年100%以上的速度增长。服务器上的工作负载正在迅速增加,因此服务器很容易在短时间内过载,尤其是对于受欢迎的网站而言。为了克服服务器的过载问题,有两种解决方案。一种是单服务器解决方案,即将服务器升级到性能更高的服务器,但是当请求增加时,它将很快过载,因此我们必须再次对其进行升级,升级过程复杂且成本高昂。另一个是多服务器解决方案,即在服务器集群上构建可扩展的网络服务系统。当负载增加时 我们可以简单地在群集中添加新服务器或更多服务器以满足不断增长的需求,而商用服务器具有最高的性能/成本比。因此,构建用于网络服务的服务器群集系统更具可伸缩性,并且更具成本效益。

有几种方法可以构建服务器集群。

  • 基于DNS的负载平衡群集
    DNS负载平衡可能是构建网络服务群集的最简单方法。它使用域名系统通过将域名解析为服务器的不同IP地址来将请求分发到不同的服务器。当DNS请求到达DNS服务器以解析域名时,DNS服务器会基于调度策略(例如以循环方式)发出服务器IP地址之一,然后来自客户端的请求使用相同的本地缓存名称服务器将在指定的名称解析生存时间(TTL)中发送到同一服务器。
    但是,由于客户端和分层DNS系统的缓存特性,很容易导致服务器之间的动态负载不平衡,因此服务器处理峰值负载并不容易。名称映射的TTL值不能在DNS服务器上很好地选择,如果值较小,则DNS流量很高,而DNS服务器将成为瓶颈,而值较大时,动态负载不平衡将变得更糟。即使TTL值设置为零,调度粒度也是按主机设置的,不同用户的访问模式可能会导致动态负载不平衡,因为有些人可能从站点中拉出很多页面,而其他人可能只浏览了几页然后转到离开。而且,它不是那么可靠,当服务器节点发生故障时,将名称映射到IP地址的客户端会发现服务器已关闭
  • 基于分派器的负载平衡集群
    分派器(也称为负载平衡器)可用于在群集中的服务器之间分配负载,以便服务器的并行服务可以在单个IP地址上显示为虚拟服务,并且最终用户可以像单个服务器一样进行交互不知道群集中的所有服务器。与基于DNS的负载平衡相比,调度程序可以按精细的粒度(例如每个连接)调度请求,以实现服务器之间的更好负载平衡。一台或多台服务器发生故障时,可以掩盖故障。服务器管理变得越来越容易,管理员可以随时使一台或更多台服务器投入使用或退出服务,而这不会中断最终用户的服务。
    负载均衡可以分为两个级别,即应用程序级别和IP级别。例如,反向代理 和pWEB是用于构建可伸缩Web服务器的应用程序级负载平衡方法。他们将HTTP请求转发到群集中的其他Web服务器,获取结果,然后将其返回给客户端。由于在应用程序级别处理HTTP请求和答复的开销很高,我相信当服务器节点数增加到5个或更多时,应用程序级别的负载均衡器将成为新的瓶颈,这取决于每个服务器的吞吐量服务器。
    建议采用IP级别的负载平衡,因为IP负载平衡的开销很小,并且服务器节点的最大数量可以达到25个或最多100个。这就是IP虚拟服务器代码的设计目标

三、LVS 原理

1、LVS 体系结构

虚拟服务器是在真实服务器集群上构建的高度可扩展且高度可用的服务器。服务器群集的体系结构对于最终用户是完全透明的,并且用户与群集系统进行交互就好像它只是一台高性能虚拟服务器一样。

Linux负载均衡解决方案 -- LVS 理论概述

优点:

  • 真实服务器和负载均衡器可以通过高速LAN或地理上分散的WAN互连。
  • 负载平衡器可以将请求分派到不同的服务器,并使群集的并行服务在单个IP地址上显示为虚拟服务,并且请求分派可以使用IP负载平衡 技术或应用程序级负载平衡技术。
  • 通过透明地添加或删除集群中的节点,可以实现系统的可伸缩性。
  • 通过检测节点或守护程序故障并适当地重新配置系统,可以提供高可用性。

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

Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。

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

2、LVS 工作模式

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。

当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术。

IPVS实现负载均衡机制有三种,分别是NAT、TUN和DR。

VS/NAT

即(Virtual Server via Network Address Translation)也就是网络地址翻译技术实现虚拟服务器,当用户请求到达调度器时,调度器将请求报文的目标地址(即虚拟IP地址)改写成选定的Real Server地址,同时报文的目标端口也改成选定的Real Server的相应端口,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

注:存在两次NAT转换开销

VS/TUN

即(Virtual Server via IP Tunneling)也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。

注:存在隧道开销

VS/DR

即(Virtual Server via Direct Routing)也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而RealServer将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。

注:效果最佳

Linux负载均衡解决方案 -- LVS 理论概述

特别提示:(VS/DR)模式是互联网使用的最多多的一种模式,在LVS-DR配置中,Director将所有入站
请求转发给集群内部节点,但集群内部的节点直接将他们的回复发送给客户端计算机(没有通过
Director回来)。如下图所示
Linux负载均衡解决方案 -- LVS 理论概述
目前大多数企业,采用NAT/DR模式较多

3、LVS 调度算法

当Director收到来自客户端计算机访问她的VIP上的集群服务的入站请求时,Director必须决定那个集
群节点应该获得请求。

调度方法决定了如何在这些集群节点之间分布工作负荷。

Director可用于做出该决定的调度方法分成两个基本类别:

  • 固定调度算法:rr,wrr,dh,sh
  • 动态调度算法:wlc,lblc,lblcr,SED,NQ(后两种官方站点没提到)

常用的四种调度算法:

轮询调度(Round Robin)

“轮询”调度也叫1:1调度,调度器通过“轮询”调度算法将外部用户请求按顺序1:1的分配到集群中的每个Real Server上,这种算法平等地对待每一台Real Server,而不管服务器上实际的负载状况和连接状态。

加权轮询调度(Weighted Round Robin)

“加权轮询”调度算法是根据Real Server的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值,对于性能相对较好的Real Server可以设置较高的权值,而对于处理能力较弱的RealServer,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server的负载情况,并动态地调整其权值。

最少链接调度(Least Connections)

“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

加权最少链接调度(Weighted Least Connections)

“加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。

四、LVS 工作方式

1、LVS-DR 模式

LVS-DR原理

首先,来自客户端计算机CIP的请求被发送到Director的VIP。然后Director使用相同的VIP目的IP地址将请求发送到集群节点或真实服务器。然后,集群某个节点将回复该数据包,并将该数据包直接发送到客户端计算机(不经过director),并且以此回复数据包使用的目的VIP 地址作为源IP地址。因此,实际上是客户计算机被“欺骗”了,客户计算机始终认为它正与同一台计算机对话,而实际上它正在发送请求数据包给一台计算机(LB),并从另一台计算机(RS)接收回复的数据包。

Linux负载均衡解决方案 -- LVS 理论概述
LVS 数据包转发过程

客户端想VIP请求
Linux负载均衡解决方案 -- LVS 理论概述
Directer server 处理请求
Linux负载均衡解决方案 -- LVS 理论概述
real server 响应请求
Linux负载均衡解决方案 -- LVS 理论概述
LVS-DR模式应用特点

  • 所有集群节点RS必须和Director在相同的物理网段(即同一个局域网中);
  • 所有客户端入站(而不是出站)请求由Director首先接收,并转发给集群节点RS;
  • 集群节点RS通常来说最好带外部IP,而不使用Director及某固定机器作为默认网关,以便将数据包直接回复给客户端计算机,且不会产生回包的瓶颈;
  • 所有集群节点RS上必须在lo网卡上绑定VIP地址,以便验证通过目的IP非RS的数据包;
  • 由于所有集群节点RS上必须在lo网卡上绑定VIP地址,因此,带来arp问题,即集群所有节点RS默认会相应发往Director VIP的数据包。因此要对所有集群节点RS做ARP抑制处理,把响应VIP的请求交给LVS Director
  • 很多操作系统都可以用在集群内部的RS真实服务器上只要该操作系统能够实现ARP隐藏,如:Windows,linux,unix;
  • LVS/DR模式不需要开启调度器转发功能,这点和LVS/NAT模式是不同的。
  • LVS/DR Director(服务器数量100台)可以比LVS-NAT Director(服务器数量10-20台)承受更多的并发请求和转发更多的服务器数量

LVS-DR模式ARP抑制
Linux负载均衡解决方案 -- LVS 理论概述
Linux负载均衡解决方案 -- LVS 理论概述
LVS-DR模式ARP抑制解决方法

  • 静态地址绑定;
    未必有路由器的配置权限;
    Director调用时静态地址绑定将难以适用;

  • 修改arptables
    arptables
    Disable ARP for VIP
    Basically, we have the following commands to disable ARP for VIP at real servers.
    arptables -F
    arptables -A INPUT -d $VIP -j DROP
    arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

  • 修改Linux内核参数,将RS上的VIP配置为lo接口的别名,限制Linux仅对对应接口的ARP请
    求做响应;

2、LVS – NAT 模式

工作逻辑图
Linux负载均衡解决方案 -- LVS 理论概述

模式特点

  • 集群节点,必须在一个网络中
  • 真实服务器必须将网关指向负载调度器(内网ip)
  • RIP 通常都是私有 IP,仅用于各个集群节点通信
  • 负载调度器必须位于客户端和真实服务器之间,充当网关(必须开启路由转发)
  • 支持端口映射
  • 负载调度器操作系统必须是 Linux ,真实服务器可以使用任意系统

3、LVS – TUN 模式

工作逻辑图
Linux负载均衡解决方案 -- LVS 理论概述

集群节点不必位于同一个物理网络但必须都拥有公网 IP(或都可以被路由)

  • 真实服务器不能将网关指向负载调度器
  • RIP 必须是公网地址
  • 负载调度器只负责入站请求
  • 不支持端口映射功能
  • 发送方和接收方必须支持隧道功能
上一篇:CV2 图像归一化函数


下一篇:practical packet analysis, using wireshark to solve real-world problems, 2nd edition 知识总结