LVS (Linux虚拟服务器)模型及算法

LVS(Linux Virtual Server)Linux虚拟服务器

LVS集群采用IP负载均衡技术和基于内容请求分发技术。

用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给真实服务器。对用户而言,集群是透明的。

LVS集群采用三层结构,其主要组成部分为:

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

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

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

模型

1. Virtual Server via Network Address Translation(VS/NAT)

将用户请求报文的目的地址改写为由调度器根据调度算法计算得出的服务器ip。服务器响应报文同理在调度器将网络地址转换。缺点是所有报文都需要经过调度器,对调度器的压力较大。

2. Virtual Server via IP Tunneling(VS/TUN)

将用户请求报文进行封装并添加新的ip头,目的地址为由调度器根据调度算法计算得出的服务器ip。服务器响应直接返回给客户端,无需经过调度器。解决了NAT对调度器的压力。

3. Virtual Server via Direct Routing(VS/DR)

将用户请求的mac地址改写为真实服务器mac地址,直接通过mac寻址将请求转发到真实服务器。服务器将响应直接发给客户端。这种模型需要调度器和服务器在同一局域网,且服务器需要配置lo ip为vip,并且设置non-arp模式。前者为了服务器能够收到处理这个请求,后者是为了避免arp请求mac出错。这个模式优于上面两种,个人认为DR模式只对mac进行处理,上面均需要对网络层数据进行一定操作,开销上mac应该较少。

调度算法

1 轮叫(Round Robin)简称RR

均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

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

处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3 最少链接(Least Connections)简称LC

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。

4 加权最少链接(Weighted Least Connections)简称WLC

具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。最少链接的扩展,加上权值的最少链接。

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

主要用于Cache集群系统。该算法找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。

6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)简称LBLCR

它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器。

7 目标地址散列调度(Destination Hashing)简称DH

一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。

8 源地址散列调度(Source Hashing)简称SH

算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。

9 最短的期望的延迟(shortest expected delay scheduling)简称sed

基于wlc算法

10 最少队列调度(never queue scheduling)简称nq

无需列队,如果有台realserver的连接数=0 就直接分配过去,不需要进行sed运算 。

小结

问题

  1. 需要多次连接,缓存,数据保存在不同服务器上。
  2. TUN模式需要设置lo IP?怎么实现拆包后被自己处理而不是丢弃。
  3. NAT 调度器如何知道服务器返回报文要发给哪个具体客户端。当请求数大于服务器数,如何判断。 (nat网络地址转换只将目标IP和端口修改为真实服务器IP端口,对源没有修改。)
  4. nat模型,是否可以直接在真实服务器中将响应报文修改为VIP?(直接使用隧道模型即可。若在服务器修改,增加服务器开销,只需使用隧道模型即可)

参考链接

https://blog.csdn.net/weixin_40470303/article/details/80541639

https://blog.csdn.net/weixin_33704234/article/details/86332145

https://www.xuebuyuan.com/3214658.html

https://www.cnblogs.com/Csir/p/6754077.html

https://blog.csdn.net/qq_41772936/article/details/80146464

https://www.cnblogs.com/yaboya/p/9109745.html

猜你喜欢

转载自www.cnblogs.com/boxker/p/11224400.html