LVS负载均衡
负载均衡技术(模式):
1、lvs-DR(direct routing)直接路由模式:客户进来的请求先经过调度器,然后再丢给服务器,最后由服务器直接发送请求给客户端(不需要再次经过调度器,这个可以跟很多服务器,因为它回应请求不需要经过调度器)。一般是在公司,就是同一网络里用。 性能好,安全性差。但这个用的最多。
2、LVS-NAT(Network address translation): 客户进来的请求先经过调度器,然后再丢给服务器,接着服务器再把请求丢给调度器,从而最后是由调度器来回应给客户端。(这样的话,调度器比较忙,所以调度器后面不能跟太多服务器,3-5台即可,这个ddos***的时候相对来说更安全一些,因为服务器没有直接暴露在外面,是隐藏在调度器后面,相对性能会差一些)
3、LVS-TUN(IP tunneling):隧道模式 : 起到备份或是cdn加速的功能。备份:例如有3台服务器,其中一台坏掉了,那么请求就会分给其他两台服务器。cdn加速:北京的请求就分给北京的服务器,上海的请求就分给上海的服务器,武汉的就分给武汉的服务器,这样来平均负载。用的最少
lvs的IP地址类型调度算法
lvs分为静态(四种)与动态(六种)
轮循调度(rr)
:将外部请求按顺序轮流分配到集群中的真实服务器上,它均衡的对待每一台服务器,而不管服务器上实际的连接数和负载数。
优点:速度快,将外部请求按顺序轮流分配到集群中的真实服务器上。
缺点:不管服务器上实际的连接数和负载数。权重无效,因为不管怎么设置,它总是均衡的将外部请求按顺序轮流分配到集群中的真实服务器上。
加权轮循(wrr):
数字越大,权重越高:调度算法根据真实服务器的不同处理能力来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的附载情况,并动态的调整其权重值。
优点:可根据服务器的性能来设置权重,从而达到负载。
缺点:不管服务器忙与不忙,都会按照你之前的权重来进行负载访问。
根据权重来判断。
目标地址散列(DH)
:根据请表求的目标ip地址,作为散列键(hash key) 从静态分配的散列表找出对应的服务器,若服务器是可用的且未超载,将请求发送到服务器,否则返回空。(相当于给wrr策略做了一次扩展)
优点:1、首先根据权重来访问哪一个服务器,然后第一个请求访问服务器后,接着只要是这个ip进行的访问,都会在这个服务器上,有缓存来进行加速访问。2、原客户端ip进行访问的同时,不会去跑到第二个服务器上。
缺点:不管你忙与不忙,都会按照你之前的权重来进行访问。后端所跟的服务器不会太多,否则director server的压力就会变得过大。
源地址散列(SH)
:根据请表求的源ip地址,作为散列键(hash key) 从静态分配的散列表找出对应的服务器,若服务器是可用的且未超载,将请求发送到服务器,否则返回空。(从哪个接口出去,再从哪个接口回来,相当于给rr做了次扩展)
Iptables里有个状态跟踪,必须从哪个网关(接口)出去,再从哪个网关(接口)回来,否则这个状态就会没有意义。这个也是一样,必须是从哪个接口出去,再从哪个接口回来。(目的保证)
静态的有缓存,而动态的没有,静态的比较笨一些,动态的智能一些。
1、最少链接:(LC):
根据活动连接数与非活动链接数的总和进行判断。
活动连接:请求服务访问,例如提交数据或是在往数据库里写东西的时候。
非活动连接:例如:已经建立起3次握手了。在访问网页的同时,停留在网页中,不提交数据或是不写数据的时候。
连接数=活动连接数+非活动连接数 来判断的
开销:最后计算请求书哪个最小就丢给谁
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
谁少就丢给谁。
3、基于局部性的最少链接(LBLC):
在DH的基础上做微调,简单的说就是把DH做成动态调度算法。
DH:访问一个请求的时候,会一直在第一次访问时的那台服务器上。
而LBLC就是尽量让它在第一次访问的服务器上,但如果发现访问的原来第一次服务器上的数据过大时,它便会去其它的服务器上。
算发还是用的WLC的算法。
4、带复制的基于局部性最少链接(LBLCR):
简单说就是又在LBLC的基础上做的微调,把自己已有的缓存复制给别人(缓存共享)
5、最短的期望的延迟(SED):在WLC的基础之上做的微调。
不考虑非活动连接数,只考虑活动连接数。(这种指的是特殊情况下做的微调)
例如:活动连接请求都为0
Server1:权重是1 (0+1)*256/1=256
Server2:权重是10 (0+1)*256/10=25.6
当数据少的时候使用这个
活动连接+1(加1目的是为了让它有误差,当连接数少的时候会有突出)*256除以权重
这样的目录就是为了当一台服务器的权重过高时,为了减少权重高一些的服务器的压力,让权重低的服务器帮忙也分担一些出来。
6、最少队列调度(NQ):只要是服务器端活动链接数为零,就丢给活动链接数为零的那台服务器。(这种是特殊情况下做的微调)