LVS是如何决定把用户请求转给哪台服务器的?LVS有很多种调度算法,下面介绍几个最常用的算法
(1)轮询
这是最简单的调度算法,调度器将收到的请求循环分配到服务器集群中的每台机器,这种算法平等地对待每一台服务器,而不管服务器上实际的负载状况和连接状态,适合所有服务器有相同或者相近性能的情况
算法
i = -1;
i = (i + 1) mod n
(2)加权轮询
调度算法根据服务器的不同能力来分配请求
可以对每台服务器设置不同的权值,对性能相对较好的服务器设置较高的权值,而对处理能力较弱的设置较低的权值,这样保证了处理能力强的服务器处理更多的请求,充分合理地利用了服务器资源
算法
先轮询,然后结合权值,来决定是否使用此服务器
假设有3台服务器,每个服务器的权值为 4、3、2,现在来了9个请求,那么这些请求的处理次序应该是什么样的呢?
下面是我用JS模拟的处理方式,有兴趣可以了解下
(3)最少连接数
动态地将网络请求调度到已建立的连接数最少的服务器上,这个算法同轮询算法类似,适合于各个服务器计算能力相似的情况
算法
调度器为每台服务器记录其连接数,计算取得连接数最少的服务器,把请求分配给他,分配后,此服务器的连接数加1,连接终止或超时后,连接数减1
(4)加权最少连接数
每个服务器可以用相应的权值表示其处理能力,系统管理员可以动态地设置相应的权值,也是为了平衡利用服务器资源
算法
各个服务器的连接数 / 其权值
取得结果值最小的那个