通用算法

固定算法(静态调度算法):只根据算法本身去调度,不考虑服务器本身

动态算法(动态调度算法):除了考虑算法本身,还要考虑服务器本身

静态调度算法:

①RR轮询:将每次用户的请求分配给后端的服务器,从第一台服务器开始到第N台服务器结束,然后循环;

②WRR 加权轮询:按照权重的比例实现在多台主机之间进行调度;

③SH(source hash)源地址散列:将同一个IP的用户请求,发送给同一个服务器;

④DH(destination hash)目标地址散列:将同一个目标地址的用户的请求发送给同一个真实服务器(提高缓存的命中率)

动态调度算法:

①LC(lest-connection)最少连接:将新的连接请求分配给连接数最少的服务器 (活动连接数*256+非活动连接数)

②WLC加权最少连接:特殊的最少连接算法,权重越大承担的请求数量越多((活动连接数*256+非活动连接数)/权重)

③SED最短期望延迟:特殊的WLC算法((活动连接数+1)*256/权重)

④NQ永不排队:特殊的SED算法,无需等待,如有真实的服务器连接数等于0,那就直接分配,不需要进行运算

⑤LBLC特殊的DH算法:既能提高缓存的命中率,又要考虑服务器性能

⑥LBLCR LBLC+缓存:尽可能提高负载均衡和缓存命中率的这种方案

LVS持久连接

PCL(持久客户端连接)每个客户端持久:将来自于同一个客户端的所有请求统统定向至此前选定的RS,也就是只要IP相同,所分配的服务器始终相同

#ipvsadm -A -t 172.168.0.8:0 -s wlc -p 120 (120为持久化连接时间)

PPC(持久端口连接)每个端口持久:将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的RS

# ipvsadm -A -t 172.168.0.8:80 -s rr -p 120

PFMC:持久防火墙标记连接:将来自于同一客户端对指定服务(端口)的请求,始终定向至此选定的RS,不过他可以将两个毫不相干的端口定义为一个集群服务。类似于打标记

# iptables -t mangle -A PREROUTING -d 172.168.0.8 -p tcp --dport 80 -j MARK -set-mark 10
# iptables -t mangle -A PREROUTING -d 172.168.0.8 -p tcp --dport 443 -j MARK -set-mark 10
# service iptables save
# ipvsadm -A -f 10 -s wlc -p 120

对上述代码进行解释:首先添加一个防火墙规则,当目标地址为172.168.0.8,并且目标端口为80(http)时,给数据包打一个标记,设置mask值为10,接着添加一个防火墙规则,当目标地址为172.168.0.8并且目标端口为443(HTTPS)时,给数据包打上一个标记,设置mask值为10,最后,添加一个负载调度器,当mask值为10时,进行负载均衡,使用wlc算法,持久化生效时间为120S。