Skip to content

LVS(Linux Virtual Server)详解

LVS简介
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

什么是Virtual Server?
虚拟服务器是建立在真实服务器集群上一个高度可扩展,高度可用的服务器。
服务器群集的结构对最终用户是完全透明的,并且用户与集群系统进行交互,就像它是只有一个单一的高性能的虚拟服务器。

为什么要用LVS?
随着互联网和它在我们生活中越来越重要的作用的爆炸性增长,互联网上的流量急剧增加,服务器上的工作负载也随之迅速增加,使得服务器将很容易过载,特别是对于一个受欢迎的网站。为了克服服务器的过载问题,一般来说有两种解决思路:Scale-up 和 Scale out,也称作垂直扩展和水平扩展。
垂直扩展(Scale-up):
也就是将服务器升级到更高性能的服务器,通常指增加CPU和内存,购买昂贵的高性能服务器。
优点:耗电量比使用多台服务器要少; 实施简单;
缺点:价格太昂贵;由于资源的争用,服务器性能的增长会越来越小;有很大的硬件故障导致服务不可用的风险;受限制于供应商,且可扩展升级的空间是有限的;
水平扩展(Scale-out):
是多个服务器的解决方案,即建立一个可扩展的网络服务系统的服务器集群上。当负载增加时,我们可以简单地添加新的服务器或更进群,以满足日益增长的需求。
优点:比起垂直扩展要便宜的多;有容错能力;易升级;有着很大的扩展空间;
缺点:服务器的维护和管理更加麻烦;耗电和制冷的费用会比垂直扩展要高;如果使用付费授权软件,那么会增加 lisence 的费用;

一般来说,随着服务器性能提升,其价格也是指数级上升的,使用水平扩展的方式能够节约很多成本,同时还能够增加整个服务的容错能力。

LVS主要组成部分为:


负载调度器(load balancer/ Director),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。


LVS负载均衡方式:

Virtual Server via Network Address Translation NAT(VS/NAT)(通过网络地址转换)
处理方式:调度器接收到请求后,通过地址转换转给一台VS执行,VS执行经由调度器返回给用户。(类比网关)
优点:VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址。
缺点:它的伸缩能力有限,当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器。

Virtual Server via IP Tunneling(VS/TUN)(IP隧道方式)
处理方式:IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。(调度器收到请求->添加VS IP封装->隧道转发->处理->直接返回用户(源地址使用调度器地址?))
优点:负载调度器只将请求调度到不同的后端服务器,后端服务器将应答的数据直接返回给用户。这样,负载调度器就可以处理大量的请求,它甚至可以调度百台以上的服务器(同等规模的服务器),而它不会成为系统的瓶颈。所以,VS/TUN可以极大地增加负载调度器调度的服务器数量。
缺点:所有的服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议;VS/TUN的后端服务器主要运行Linux操作系统;IP隧道的开销;

Virtual Server via Direct Routing(VS/DR)(修改mac地址,直接路由)
处理方式:VS/DR方式是通过改写请求报文中的MAC地址部分来实现的。不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。请求也是由vs处理完后直接返回用户。
优点:VS/DR调度器只处理客户到服务器端的连接,响应数据可以直接从独立的网络路由返回给客户。LVS集群系统的扩展性好;没有IP隧道的开销;
缺点:要求负载调度器与实际服务器都有一块网卡连在同一物理网段上(必须在同一个网段上);


负载均衡调度算法
1. 轮询调度(Round Robin)(简称rr)

调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。


2. 加权轮叫(Weighted Round Robin)(简称wrr)

调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3. 最少连接(Least Connections)(简称LC)

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

4. 加权最少链接(Weighted Least Connections)(WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。


5. 基于局部性的最少链接(Locality-Based Least Connections)(LBLC)

“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。


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

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

8. 源地址散列(Source Hashing)(SH)
“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

9. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)
基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。

10. 最少队列调度(Never Queue Scheduling NQ)(NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算

Published in服务应用集群架构

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注