【上海大数据培训】LVS三种负载均衡模式与10种调度算法

时间:2018-03-30 16:58:37   来源:上海尚学堂   阅读:

一、LVS的由来

Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux 虚拟服务器(Linux Virtual Servers,LVS) 使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。

二、LVS三种负载均衡模式

 

2.1 NAT模式

网络地址转换,工作在网络层(三层),只有VIP是公网IP,其余都是私网IP,Real Server指定LVS为网关,LVS开启路由转发,源和目标地址转换,数据的进出期间,无论是进来的流量,还是出去的流量,都必须经过DR,会产生一种瓶颈,适合小网络,规模10台左右。
 
 
工作原理:
 
1>.用户发送请求报文到LVS的VIP上,VIP选择一个Real Server,并记录连接信息到hash表中,然后修改用户的请求报文的目的IP地址为Real Server的地址,将请求发给Real Server;
 
2>.Real Server收到请求报文包后,发现目的IP是自己的IP,于是处理请求,然后发送reply给LVS;
 
3>.LVS收到reply包后,修改reply包的的源地址为VIP,发送给用户;
 
4>.从用户来的属于本次连接的包,查hash表,然后发给对应的Real Server。
 
5>.当用户发送完毕,此次连接结束或者连接超时,那么LVS自动从hash表中删除此条记录。
 

2.2 DR模式

 
直接路由模式,工作在TCP/IP数据链路层(二层),必须都是公网ip,要求是同网段(因为DR是转发给RS的,是在数据链路层实现的,DR要对二层包头进行改换,所以DR和Real Server必须在一个广播域下)。不需要路由转发。需要关闭arp解析(抑制arp帧),客户请求处理后直接返回给客户。规模几十台左右。
 
 
工作原理:
 
1>.当一个用户发送一个WEB请求到VIP;
 
2>.LVS服务器根据VIP选择对应的Real Server的Pool,根据算法,在Pool中选择一台Real Server,并将这台Real Server的MAC地址作为目的MAC地址,重新将IP包封装成帧转给Real Server,LVS在hash表中记录该次连接;
 
3>.然后将用户的请求包发给选择的Real Server;
 
4>.最后选择的Real Server把应答包直接传给用户;
 
5>.当用户继续发包过来时,LVS根据更才记录的hash表的信息,将属于此次连接的请求直接发到刚才选择的Real Server上;当连接中止或者超时,hash表中的记录将被删除。
 

2.3 IP隧道模式

 
ip-tun模式,工作在网络层(三层),网卡需要具备tun隧道协议网卡,系统支持ip隧道,增加了数据传输时间,必须都是公网ip,可以是不同网段,跨路由,分散互联网不同位置,不需要路由转发。规模几十台左右。
 
 
工作原理:
 
1>用户发送请求报文包到LVS服务器的VIP上。
 
2>.VIP按照算法选择后端的一个Real Server,将用户的请求报文包封装到一个新的IP包里,新IP包的目的IP是Real Server的IP,然后转发给Real Server,并将记录一条消息到hash表中。
 
3>.Real Server收到包后,解封装,取出用户的请求报文包,发现他的目的地址是VIP,而Real Server发现在自己的lo:0口上有这个IP地址,于是处理用户的请求,然后将relpy这个请求报文包直接发给用户。
 
4>.该用户的后面的请求报文包,LVS直接按照hash表中的记录直接转发给Real Server,当传输完毕或者连接超时,那么将删除hash表中的记录。

三、LVS的调度算法

 
LVS的调度算法分为静态与动态两类。
 

3.1 静态算法(4种):


只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况
 
①.RR:轮叫调度(Round Robin)
  调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
 
②.WRR:加权轮叫(Weight RR)
  调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
 
③.DH:目标地址散列调度(Destination Hash )
  根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
 
④.SH:源地址 hash(Source Hash)
  源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
 

3.2 动态算法(6种):


前端的调度器会根据后端真实服务器的实际连接情况来分配请求
 
①.LC:最少链接(Least Connections)
  调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
 
②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)
  在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
 
③.SED:最短延迟调度(Shortest Expected Delay )
  在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
 
④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)
  无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
 
⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)
  基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
 
⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
  带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

参考文章:https://yq.aliyun.com/articles/38576;https://www.cnblogs.com/daixiang/p/5445584.html

感谢阅读上海尚学堂大数据文章,获取更多大数据内容或支持请点击访问: 上海大数据培训

分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫