LVS(三)十种负载均衡调度算法

LVS的负载均衡的算法共十种,又分为动态和静态两种。静态方法四种,动态方法六种。

静态方法与动态方法有什么区别呢

静态方法就是明确告诉LVS怎么做,LVS不懂得变通,不会根据后端RS忙闲进行调整。

动态方法会根据后端RS的忙闲进行相当的调整。

一、静态方法

静态方法:仅根据算法本身进行调度。

1、RR:round robin(轮询)

轮询就是用户的请求平均分配,轮着来,你一个,我一个,非常容易理解。

2、weighted RR:加权轮询

我们可以定义一个权重,比如对于性能高的服务器给它一个大的权重,然后给性能低服务器一个小的权重,这样用户的请求到来之后,就会根据权重进行分配,并不会进行平均分配。从这个角度来看,轮询就是一个特殊的加权,加权的比重为1:1。

3、SH:source hashing

源IP地址哈希,将来自同一个IP地址的请求始终发往同一个RS,从而实现会话绑定,但是这种绑定是有缺陷的,假如用户是用S-NAT访问的话,这种源地址哈希就不好使了。

4、DH:destination hashing

目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型的使用场景是正向代理缓存场景中的负载均衡,如宽带运营商。

目标地址哈希有点难以理解,企业里面很少使用目标地址哈希,通常使用的都是运营商。

在世界杯举办期间一个大型小区(小区里面有运营商)里面很多用户都要访问优酷观看世界杯,优酷为了保证用户的观看体验,所以在小区的网络出口处放置了一个代理服务器。当其中一个用户观看世界杯视频时,proxy会缓存一份在本地,那么当第二个用户再去优酷观看世界杯的视频时,这时候缓存服务器直接从缓存里面给他了,这样就不用去youku.com里面去拿了,proxy是如何区分的呢?就是通过目标IP地址哈希。

 

proxy是正向代理服务器,正向代理服务器距离客户端比较近。

 

二、动态方法

动态方法:主要根据每RS当前的负载状态及调度算法进行调度overhead=value,较小的RS将被调度

1、LC:least connections最少连接调度算法

哪台服务器的连接数最小就向哪台服务器调度,如何判断谁的连接比较少呢?通过下面的公式,值越小越优先接受连接。

overhead=activeconnes*256+inactiveconns           #活动的连接*256+非活动的连接

非活动连接就是握手完成之后不干别的事情。

这种算法有个缺点,缺点就是这个公式太简单粗暴了,仅根据连接数去判断,假如说A设备连接了500条用户请求资源已经快用完了,而B设备因为性能好连接了600条请求之后占用了整体资源的一半都不到,如果再有用户连接,按理应该给B设备,B设备还有很多资源没有用上,但是如果根据“最小连接数算法”就应该给A设备,因为A设备的连接数更少,不科学~,怎么办呢?加上权重就可以了,那就是下面的算法。

2、WLC:weighted LC(默认调度算法)

(activeconns*256+inactiveconns)/weight

(活动的连接*256+非活动的连接)/权重

性能好的机器我们就给它大一些权重,性能差的机器我们就给他少一些的权重。

假如现在有三台RS:A/B/C,连接数分别是100/200/300,权重分别是2:3:5,没有非活动连接。

A:(100*256+0)/2=12800(优先接受用户请求)

B:(200*256+0)/3=17266

C:(300*256+0)/5=15360

这个算法也有一个缺点,啥缺点呢?刚开始的时候,所有的RS一个连接都没有的时候,情况是这样的:

A:(0*256+0)/2=0

B:(0*256+0)/3=0

C:(0*256+0)/5=0

蒙圈了,全都是零,昨办呢?

如果真的是这样的话,谁先加入到LVS里面就会先给谁?这样不科学呀!我们加入的时候并不是根据权重去加的呀,如果真的这样的话,性能不好的服务器反而成了优先响应的服务器,这样并不很合理,所以又有下面的算法。

3、SED:shortest expectioni delay,初始连接高权重优先

这种的算法的目的就是让权重高的服务器优先接受用户的请求,怎么搞呢?在上一个算法公式的基础上加上1就好了。

overhead=(activeconns+1)*256/weight

(活动的连接+1)*256/权重

A:(0+1)*256/2=128

B:(0+1)*256/3=85

C:(0+1)*256/5=51(权重最大的接受连接,这是我们想要的结果)

新的问题又来了,如果权重设置的比较极端呢?比如。

假如现在有三台RS:A/B/C,连接数分别是100/200/300,权重分别是1:1:10,没有非活动连接。

A:(0+1)*256/1=256

B:(0+1)*256/1=256

C:(0+1)*256/10=25.6(权重最大的接受连接,这是我们想要的结果)

但是二次呢?如下

A:(0+1)*256/1=256

B:(0+1)*256/1=256

C:(1+1)*256/10=51.2(第二次依然是权重最大的接受连接,还可以接受)

如果依次类推的话,10次之前都是权重最大的服务器优先接受连接,而A和B都没有干活!咱不能老是按着一个服务器欺负呀!所以这样也不是太科学。

所以又出了第四种算法,如下。

4、NQ:never queue:第一轮均匀分配,后续SED。

这种算法的在第一轮的时候,不按照任何算法,第一轮平均分配请求,一机一个, 这样的话,第一轮完成之后再使用SED算法。

A:(1+1)*256/1=512

B:(1+1)*256/1=512

C:(1+1)*256/10=51.2(权重最大的接受连接,这是我们想要的结果)

5、LBLC:locality-based LC,动态的DH算法。

使用场景:根据负载状态实现正向代理

还是那个看世界杯的场景,优酷独家,可能导致某一台优酷代理压力过大,动态的DH的算法会将一些请求强行引导到其它的代理上,不会一直按着一台代理连接不放,导致其压力过大,可以动态调整。

注意,这是根据负载状态来实现的,也就是当一台代理的负载过大时,才会将一些用户请求引导到其它的代理上,这种做法是被动的,是逼不利己的,有没有更好的算法呢?有的,就是第六种算法:带复制功能的LBLC。

6、LBLCR:LBLC with replication

带复制功能的LBLC,解决LBLC负载不均衡的问题,从负载重的复制到负载轻的RS。

带复制功能的LBLC比LBLC更主动了,不用等到负载过大才会将数据引流到其它代理上,当其发现某个资源被访问的比较频繁时,主动引导流量到其他代理上。

 

转载于:https://www.cnblogs.com/yizhangheka/p/11384347.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值