LVS调度算法详解

「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战


LVS调度算法概述

LVS根据后端服务器的负载,或其他的计算的标准,判断挑选哪台RS来进行请求处理。调度算法主要分为”静态调度算法”、”动态调度算法"。

  • 静态调度算法:RR、WRR、SH、DH
  • 动态调度算法:LC、WLC、SED、NQ、LBLC、LBLCR

LVS静态调度算法

静态:仅根据算法本身进行调度,不考虑后端实际负载情况(起点公平)

RR调度算法

RR:round robin轮询调度算法,将每一次用户的请求,轮流分配给Real Server节点。

[root@lb01 ~]# ipvsadm -E -t 172.16.1.100:80 -s rr

[root@lb01 ~]# ipvsadm -L -n
IP virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
	-> RemoteAddress:Port	Forward Weight	ActiveConn	InActConn
TCP 172.16.1.100:80 rr
	-> 172.16.1.7:80		Route	1		0			0
	-> 172.16.1.8:80		Route	1		0			0
复制代码

WRR调度算法

WRR:Weighted round robin加权轮询调度算法,根据服务器的硬件情况、以及处理能力,为每台服务器分配不同的权值,使其能够接受相应权值的请求。

[root@lb01 ~]# ipvsadm -E -t 172.16.1.100:80 -s wrr
[root@lb01 ~]# ipvsadm -e -t 172.16.1.100:80 -r 172.16.1.5:80 -g -W 5
[root@lb01 ~]# ipvsadm -e -t 172.16.1.100:80 -r 172.16.1.6:80 -g -W 1
[root@lb01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler F]ags
	-> RemoteAddress:Port	Forward	Weight	ActiveConn	InActConn
TCP 172.16.1.100:80 wrr
	-> 172.16.1.7:80		Route	5		0			0
	-> 172.16.1.8:80		Route	1		0			0
复制代码

SH调度算法

SH:Source Hashing源地址hash调度算法,将请求的源IP地址进行Hash运算,得到一个具体的数值,同时对后端服务器进行编号,按照运算结果将请求分发到对应编号的服务器上。

  • 可以实现不同来源IP的请求进行负载分发;
  • 同时还能实现相同来源IP的请求始终被派发至某一台特定的节点;
[root@lb01 ~]# ipvsadm -E -t 172.16.1.100:80 -s sh
[root@lb01 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port scheduler Flags
	-> RemoteAddress:Port	Forward	Weight	ActiveConn	InActConn
TCP 172.16.1.100:80 sh 		# 配置了Weight无效
	-> 172.16.1.7:80		Route	5		0			3
	-> 172.16.1.8:80		Route	1		0			1
复制代码

DH调度算法

DH:destination hash目标地址hash将客户端的请求,始终发往同一个RS

应用场景:LVS-Cache-源站,始终调度到指定的cache,加速用户体验。

image-20211125102352617

[root@lb01 ~]# ipvsadm -E -t 172.16.1.100:80 -s dh 
[root@lb01 ~]# ipvsadm -L -n
IP virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
	-> RemoteAddress:Port	Forward	Weight	ActiveConn	InActConn
TCP 172.16.1.100:80 dh
	-> 172.16.1.7:80		Route	5		0			0
	-> 172.16.1.8:80		Route	1		0			0
复制代码

LVS动态调度算法

动态:根据算法及RS节点负载状态进行调度,较小的RS将被调度(保证结果公平)

LC调度算法

LC:Least-Connection最少连接数调度算法,哪台RS连接数少就将请求凋度至哪台RS

算法:Overhead = (Active * 256 + Inactive仅连接)一个活动连接相当于256个非活动连接。

image-20211125102619681

WLC调度算法

WLC:Weighted Least-Connection加权最小连接数(默认调度算法),在服务器性能差异较大的情况下,采用“加权最少链接”调度算法优化负载均衡性能,权值较高的RS节点,将承受更多的连接;负载均衡可以自动问询RS节点服务器的负载状态,通过算法计算当前连接数最少的节点,而后将新的请求调度至该节点。

算法:Overhead = (Active * 256 + Inactive)/Weight

image-20211125102755627

SED调度算法

SED:Shortest Expected Delay最短期望延迟,尽可能让权重高的优先接收请求,不再考虑非活动状态,把当前处于活动状态的数目+1,通过算法计算当前连接数最少的节点,而后将新的请求调度至该节点。

算法:在WLC基础上改进,Overhead = (ACTIVE+1) * 256/Weight

image-20211125102930061

NQ调度算法

NQ:Never Queue永不排队/最少队列调度

  • 原理:SED算法由于某台服务器的权重较小,比较空闲,甚至接收不到请求,而权重大的服务器会很忙,而NQ算法是说不管权重多大都会被分配到请求。简单来说,就是无需队列,如果有台Real Server的连接数为0会直接分配过去,后续采用SED算法。
  • 算法:Overhead = (ACTIVE+1) * 256/Weight

LBLC调度算法

LBLC:Locality-Based Least- Connection动态目标地址hash调度算法,解决DH调度算法负载不均衡。

应用场景:LVS-cache-源站,此前DH算法始终调度到后端Cache1节点,会造成Cache1负载过高,LBLC会根据负载均衡动态调度到后端其他cache节点。

image-20211125103122987

LBLCR调度算法

LBLCR:Locality-Based Least-Connection with Replication带复制功能的LBLC算法,解决LBLC负载不均衡的问题,从负载重的复制到负载轻的RS

应用场景:LVS-cache-源站,此前LBLC算法始终调度到后端Cache1节点,会造成Cache1负载过高,会根据负载均衡动态调度到后端其他Cache节点,同时也会将缓存数据同步一份至Cache1、Cache2节点。

image-20211125103244944

猜你喜欢

转载自juejin.im/post/7035455953751244831
今日推荐