LVS是如何决定把用户请求转给哪台服务器的?LVS有很多种调度算法,下面介绍几个最常用的算法

(1)轮询

这是最简单的调度算法,调度器将收到的请求循环分配到服务器集群中的每台机器,这种算法平等地对待每一台服务器,而不管服务器上实际的负载状况和连接状态,适合所有服务器有相同或者相近性能的情况

算法

i = -1;
i = (i + 1) mod n


(2)加权轮询

调度算法根据服务器的不同能力来分配请求

可以对每台服务器设置不同的权值,对性能相对较好的服务器设置较高的权值,而对处理能力较弱的设置较低的权值,这样保证了处理能力强的服务器处理更多的请求,充分合理地利用了服务器资源

算法

先轮询,然后结合权值,来决定是否使用此服务器

假设有3台服务器,每个服务器的权值为 4、3、2,现在来了9个请求,那么这些请求的处理次序应该是什么样的呢?

下面是我用JS模拟的处理方式,有兴趣可以了解下


LVS负载均衡的调度算法_java


(3)最少连接数

动态地将网络请求调度到已建立的连接数最少的服务器上,这个算法同轮询算法类似,适合于各个服务器计算能力相似的情况

算法

调度器为每台服务器记录其连接数,计算取得连接数最少的服务器,把请求分配给他,分配后,此服务器的连接数加1,连接终止或超时后,连接数减1

(4)加权最少连接数

每个服务器可以用相应的权值表示其处理能力,系统管理员可以动态地设置相应的权值,也是为了平衡利用服务器资源

算法

各个服务器的连接数 / 其权值

取得结果值最小的那个