LVS负载均衡

负载均衡技术(模式):

1、lvs-DR(direct routing)直接路由模式:客户进来的请求先经过调度器,然后再丢给服务器,最后由服务器直接发送请求给客户端(不需要再次经过调度器,这个可以跟很多服务器,因为它回应请求不需要经过调度器)。一般是在公司,就是同一网络里用。 性能好,安全性差。但这个用的最多。

lvs十种调度策略+三种模式_lvs 

2、LVS-NAT(Network address translation):  客户进来的请求先经过调度器,然后再丢给服务器,接着服务器再把请求丢给调度器,从而最后是由调度器来回应给客户端。(这样的话,调度器比较忙,所以调度器后面不能跟太多服务器,3-5台即可,这个ddos***的时候相对来说更安全一些,因为服务器没有直接暴露在外面,是隐藏在调度器后面,相对性能会差一些)

lvs十种调度策略+三种模式_lvs_02 

3、LVS-TUN(IP tunneling):隧道模式 :  起到备份或是cdn加速的功能。备份:例如有3台服务器,其中一台坏掉了,那么请求就会分给其他两台服务器。cdn加速:北京的请求就分给北京的服务器,上海的请求就分给上海的服务器,武汉的就分给武汉的服务器,这样来平均负载。用的最少

           lvs的IP地址类型 

 lvs十种调度策略+三种模式_lvs_03

调度算法

lvs分为静态(四种)与动态(六种)

lvs十种调度策略+三种模式_lvs_04


轮循调度(rr)

:将外部请求按顺序轮流分配到集群中的真实服务器上,它均衡的对待每一台服务器,而不管服务器上实际的连接数和负载数。

优点:速度快,将外部请求按顺序轮流分配到集群中的真实服务器上。

缺点:不管服务器上实际的连接数和负载数。权重无效,因为不管怎么设置,它总是均衡的将外部请求按顺序轮流分配到集群中的真实服务器上。

加权轮循(wrr):

数字越大,权重越高:调度算法根据真实服务器的不同处理能力来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的附载情况,并动态的调整其权重值。

优点:可根据服务器的性能来设置权重,从而达到负载。

缺点:不管服务器忙与不忙,都会按照你之前的权重来进行负载访问。

根据权重来判断。

lvs十种调度策略+三种模式_lvs_05

 

目标地址散列(DH)

:根据请表求的目标ip地址,作为散列键(hash key) 从静态分配的散列表找出对应的服务器,若服务器是可用的且未超载,将请求发送到服务器,否则返回空。(相当于给wrr策略做了一次扩展)

优点:1、首先根据权重来访问哪一个服务器,然后第一个请求访问服务器后,接着只要是这个ip进行的访问,都会在这个服务器上,有缓存来进行加速访问。2、原客户端ip进行访问的同时,不会去跑到第二个服务器上。

缺点:不管你忙与不忙,都会按照你之前的权重来进行访问。后端所跟的服务器不会太多,否则director server的压力就会变得过大。

源地址散列(SH)

:根据请表求的源ip地址,作为散列键(hash key) 从静态分配的散列表找出对应的服务器,若服务器是可用的且未超载,将请求发送到服务器,否则返回空。(从哪个接口出去,再从哪个接口回来,相当于给rr做了次扩展)

Iptables里有个状态跟踪,必须从哪个网关(接口)出去,再从哪个网关(接口)回来,否则这个状态就会没有意义。这个也是一样,必须是从哪个接口出去,再从哪个接口回来。(目的保证)

静态的有缓存,而动态的没有,静态的比较笨一些,动态的智能一些。

lvs十种调度策略+三种模式_lvs_06


1、最少链接:(LC):

根据活动连接数与非活动链接数的总和进行判断。

活动连接:请求服务访问,例如提交数据或是在往数据库里写东西的时候。

非活动连接:例如:已经建立起3次握手了。在访问网页的同时,停留在网页中,不提交数据或是不写数据的时候。

连接数=活动连接数+非活动连接数 来判断的

开销:最后计算请求书哪个最小就丢给谁  

lvs十种调度策略+三种模式_lvs_07 

       

Server1:共有1000个请求(例如),900个变成非活动连接,100个活动连接,就是用100*256+900(非活动连接)

Server2:共有1000个请求,结果全部成为非活动连接(都走了)0*256+1000(非活动连接)  

根据以上算法,来判断哪个请求较少,谁小就丢给谁。

2、加权最少链接:(WLC):

不设置调度算法,默认是wlc,(开销除以权重(100*256+900)/3),

还是拿上面的那个例子说

Server1:权重是3  (100*256+900)/3

Server2:权重是1   (0*256+1000)/1

谁少就丢给谁。

lvs十种调度策略+三种模式_lvs_08


3、基于局部性的最少链接(LBLC):

在DH的基础上做微调,简单的说就是把DH做成动态调度算法。

DH:访问一个请求的时候,会一直在第一次访问时的那台服务器上。

而LBLC就是尽量让它在第一次访问的服务器上,但如果发现访问的原来第一次服务器上的数据过大时,它便会去其它的服务器上。

算发还是用的WLC的算法。

4、带复制的基于局部性最少链接(LBLCR):

lvs十种调度策略+三种模式_lvs_09

简单说就是又在LBLC的基础上做的微调,把自己已有的缓存复制给别人(缓存共享)

lvs十种调度策略+三种模式_lvs_10

 

5、最短的期望的延迟(SED):在WLC的基础之上做的微调。

不考虑非活动连接数,只考虑活动连接数。(这种指的是特殊情况下做的微调)

例如:活动连接请求都为0   

Server1:权重是1   (0+1)*256/1=256

Server2:权重是10  (0+1)*256/10=25.6

当数据少的时候使用这个

活动连接+1(加1目的是为了让它有误差,当连接数少的时候会有突出)*256除以权重

这样的目录就是为了当一台服务器的权重过高时,为了减少权重高一些的服务器的压力,让权重低的服务器帮忙也分担一些出来。

6、最少队列调度(NQ):只要是服务器端活动链接数为零,就丢给活动链接数为零的那台服务器。(这种是特殊情况下做的微调)