LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。
一、LVS概念
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。现在LVS已经是Linux内核标准的一部分 使用LVS可以达到的技术目标是:通过LVS达到的负载均衡技术和Linux操作系统实现一个高性能高可用的Linux服务器群集,它具有良好的可靠性,可拓展性和可操作性。从而以低廉的成本实现最优的性能。LVS从1998年开始,发展到现在已经是一个比较成熟的项目了。利用LVS技术可以实现高性能(HA),高可压缩的网路服务,例如WWW服务,FTP服务,MAIL服务等。比较著名的就是www.linux.com以及www.real.com.
二、LVS的体系架构
使 用LVS架设的服务器集群系统有三个部分组成:最前端的负载均衡层(Loader Balancer)(director server 转发服务器),中间的服务器群组层,用Server Array表示(真正提供服务的),最底层的数据共享存储层,用Shared Storage表示。在用户看来所有的应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
LVS的各个层次的详细介绍:
Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Director Server)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的此监控模块Ldirectord,(用来判断real server 何时出现故障,然后自动把出现故障的那台服务器的服务转移到其他服务器上)作用 :模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。
Server Array层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器、视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN(局域网(Local Area Network)是在一个局部的地理范围内(如一个学校、工厂和机关内),将各种计算机。外部设备和数据库等互相联接起来组成的计算机通信网,简称LAN。它可以通过数据通信网或专用数据电路,与远方的局域网、数据库或处理中心相连接,构成一个大范围的信息处理系统。)或分布在各地的WAN(广域网WAN(Wide Area Network)也叫远程网RCN(Remote Computer Network),它的作用范围最大,一般可以从几十公里至几万公里。一个国家或国际间建立的网络都是广域网。在广域网内,用于通信的传输装置和传输介质可由电信部门提供。目前,世界上最大的信息网络Internet已经覆盖了包括我国在内的180多个国家和地区,连接了数万个网络,终端用户已达数千万.并且以每月15%的速度增长。)相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
也就是说负载均衡器同时也是真正的应用服务器:
这样子说吧,也好就是director server上面有了LVS模块、监控模块Ldirectord、同时也有应用服务器 IPVS软件(虚拟出来一个ip,用户通过这个ip地址进行访问)
Shared Storage层:(我理解为存储硬盘)是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成(RAID0、RAID1、RAID5、RAID10,当然也可以是硬件磁盘阵列设备),为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统(可以实现文件内容同步),例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。
从整个LVS结构可以看出,Director Server是整个LVS的核心,目前,用于Director Server的操作系统只能是Linux和FreeBSD(FreeBSD是一种自由类Unix操作系统,是由经过BSD、386BSD和4.4BSD发展而来的类Unix的一个重要分支。FreeBSD拥有超过200名活跃开发者和上千名贡献者。FreeBSD被认为是自由操作系统中的不知名的巨人。它不是Unix,但如Unix一样运行,兼容POSIX。作为一个操作系统,FreeBSD被认为相当稳建可靠。),linux2.6内核不用任何设置就可以支持LVS功能,而FreeBSD作为 Director Server的应用还不是很多,性能也不是很好。对于Real Server,几乎可以是所有的系统平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。
三、 LVS集群的特点
3.1 IP负载均衡与负载调度算法
负载均衡的实现方式:
1.IP负载均衡技术
负载均衡技术有很多实现方案,有基于DNS域名轮流解析的方法、有基于客户端调度访问的方法、有基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的是IP负载均衡技术。
LVS 的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。
客户发出访问请求------>通过IPVS软件虚拟出来的ip(VIP)访问负载调度器(director)-------->负载调度器从real server列表选取一个服务节点响应用户的请求(负载调度器它自己拥有的一张表)------将客户虚拟ip地址改成real server ip,将端口改为realserver 的相应端口号最后将请求转发给real server--------------当服务器返回数据给用户的时候--------负载调度器可以把ip号和端口号该过来发送给客户端,在客户看起来他只是与负载调度器进行了通信。
当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的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方式下,用户请求和响应报文都必须经过Director Server地址重写,当用户请求越来越多时,调度器的处理能力将称为瓶颈。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技术实现虚拟服务器。它的连接调度和管理与VS/NAT方式一样,只是它的报文转发方法不同,VS/TUN方式中,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器,此外,对Real Server的地域位置没有要求,可以和Director Server位于同一个网段,也可以是独立的一个网络。因此,在TUN方式中,调度器将只处理用户的报文请求,集群系统的吞吐量大大提高。
客户端发来请求----->负载调度器把请求转发到某个real server--------->
real server直接跟客户进行通信
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技术实现虚拟服务器。它的连接调度和管理与VS/NAT和VS/TUN中的一样,但它的报文转发方法又有不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销(所谓隧道,实际上是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。发送路由器将被传送的协议包进行封装,经过网络传送,接受路由器解开收到的包,取出原始协议;而在传输过程中的中间路由器并不在意封装的协议是什么。这里的封装协议,称之为传输协议,是跨过网络传输被封装协议的一种协议,IP协议是IOS唯一选择的传输协议。而被封装的协议在此为IPX协议或者AppleTAlk协议,通常可以称之为乘客协议。需要特别注意的是:隧道技术是一种点对点的链接,因而必须在链接的两端配置隧道协议。)。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上。
2.负载调度算法
上面我们谈到,负载调度器是根据各个服务器的负载情况,动态地选择一台Real Server响应用户请求,那么动态选择是如何实现呢,其实也就是我们这里要说的负载调度算法,根据不同的网络服务需求和服务器配置,IPVS(软件)实现了如下 八种负载调度算法,这里我们详细讲述最常用的四种调度算法,剩余的四种调度算法请参考其它资料。
轮叫调度(Round Robin)
“轮叫”调度也叫1:1调度,调度器通过“轮叫”调度算法将外部用户请求按顺序1:1的分配到集群中的每个Real Server上,这种算法平等地对待每一台Real Server,而不管服务器上实际的负载状况和连接状态。
每个real server分到的请求相同 ,无论服务器的性能,感觉这个是最弱的
加权轮叫调度(Weighted Round Robin)
“加 权轮叫”调度算法是根据Real Server的不同处理能力来调度访问请求。可以对每台Real Server设置不同的调度权值,对于性能相对较好的Real Server可以设置较高的权值,而对于处理能力较弱的Real Server,可以设置较低的权值,这样保证了处理能力强的服务器处理更多的访问流量。充分合理的利用了服务器资源。同时,调度器还可以自动查询Real Server的负载情况,并动态地调整其权值。
也就是每个 real server分到的请求不一定相同
最少链接调度(Least Connections)
“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。
哪个服务器请求少,那么再有请求了就把请求给它
加权最少链接调度(Weighted Least Connections)
“加权最少链接调度”是“最少连接调度”的超集,每个服务节点可以用相应的权值表示其处理能力,而系统管理员可以动态的设置相应的权值,缺省权值为1,加权最小连接调度在分配新连接请求时尽可能使服务节点的已建立连接数和其权值成正比。
对上面的做了优化,可以通过不同的服务器的性能来分配请求数
其它四种调度算法分别为:基于局部性的最少链接(Locality-Based Least Connections)
基于局部性的最少链接调度(Locality-Based Least Connections Scheduling,以下简称为LBLC)算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,从而整个集群系统的处理能力。
LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
也就是说通过判断ip访问的多少 也就是老主顾的话 更精准。如果实在不行的话在采用最少链接的原则
带复制的基于局部性最少链接(LocalityBased Least Connections with Replication)
带复制的基于局部性最少链接调度(Locality-Based Least Connections with Replication Scheduling,以下简称为LBLCR)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。对于一个“热门”站点的服务请求,一台Cache 服务器可能会忙不过来处理这些请求。这时,LBLC调度算法会从所有的Cache服务器中按“最小连接”原则选出一台Cache服务器,映射该“热门”站点到这台Cache服务器,很快这台Cache服务器也会超载,就会重复上述过程选出新的Cache服务器。这样,可能会导致该“热门”站点的映像会出现在所有的Cache服务器上,降低了Cache服务器的使用效率。LBLCR调度算法将“热门”站点映射到一组Cache服务器(服务器集合),当该“热门”站点的请求负载增加时,会增加集合里的Cache服务器,来处理不断增长的负载;当该“热门”站点的请求负载降低时,会减少集合里的Cache服务器数目。这样,该“热门”站点的映像不太可能出现在所有的Cache服务器上,从而提供Cache集群系统的使用效率。
cache,一般指高速缓冲存储器。高速缓冲存储器(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。
LBLCR算法先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按“最小连接”原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按“最小连接”原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度
目标地址散列(Destination Hashing)
和源地址散列(Source Hashing)
3.2 高可用性
LVS是一个基于内核级别的应用软件,因此具有很高的处理性能,用LVS构架的负载均衡集群系统具有优秀的处理能力,每个服务节点的故障不会影响整个系统的正常使用,同时又实现负载的合理均衡,使应用具有超高负荷的服务能力,可支持上百万个并发连接请求。如配置百兆网卡,采用VS/TUN或VS/DR调度技术,整个集群系统的吞吐量可高 达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。
3.3 高可靠性
LVS负载均衡集群软 件已经在企业、学校等行业得到了很好的普及应用,国内外很多大型的、关键性的web站点也都采用了LVS集群软件,所以它的可靠性在实践中得到了很好的证 实。有很多以LVS做的负载均衡系统,运行很长时间,从未做过重新启动。这些都说明了LVS的高稳定性和高可靠性。
3.4 适用环境
LVS 对前端Director Server目前仅支持Linux和FreeBSD系统,但是支持大多数的TCP和UDP协议。
支持TCP协议的应用有:HTTP,HTTPS,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。
支持UDP协议的应用有:DNS,NTP,ICP,视频、音频流播放协议等。
LVS对Real Server的操作系统没有任何限制,Real Server可运行在任何支持TCP/IP的操作系统上,包括Linux,各种Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows等。
3.5 开源软件
LVS集群软件是按GPL(GPL,是General Public License的缩写,是一份GNU通用公共授权非正式的中文翻译。它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款─只有GNU通用公共授权英文原文的版本始具有此等效力。 )(GNU Public License)许可证发行的自由软件,因此,使用者可以得到软件的源代码,并且可以根据自己的需要进行各种修改,但是修改必须是以GPL方式发行