一、通用算法
- 固定算法(静态调度算法):只根据算法本身去调度,不考虑服务器本身
- 动态算法(动态调度算法):除了考虑算法本身,还要考虑服务器状态
静态调度算法
- RR 轮询: 将每次用户的请求分配给后端的服务器,从第一台服务器开启到第 N 台结束,然后循环
- WRR 加权轮询: 按照权重的比例实现在多台主机之间进行调度
- SH(source hash)源地址散列: 将同一个 IP 的用户请求,发送给同一个服务器
- DH(destination hash)目标地址散列: 将同一个目标地址的用户请求发送给同一个真实服务器(提高缓存的命中率)
动态调度算法
- LC(lest-connection)最少连接: 将新的连接请求,分配给连接数最少的服务器 活动连接X256 + 非活动连接
- WLC 加权最少连接: 特殊的最少连接算法,权重越大承担的请求书越多 (活动连接 X 256 + 非活动连接)/ 权重
- SED 最短期望延迟: 特殊的 WLC 算法 (活动连接 + 1) * 256 / 权重
- NQ 永不排队: 特殊的 SED 算法,无需等待,如果有真实服务器的连接数等于0那就直接分配不需要运算
- LBLC 特殊的 DH 算法: 技能提高缓存命中率,又要考虑服务器性能
- LBLCR LBLC+缓存: 尽可能提高负载均衡和缓存命中率的折中方案
二、LVS 持久连接
- PCC(持久客户端连接): 每客户端持久;将来自于同一客户端的所有请求统统定向至此前选定的RS;也就是只要IP相同,分配的服务器始终相同
example:ipvsadm -A -t 172.16.0.8:0 -s wlc -p 120
- PPC(持久端口连接): 每端口持久;将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的 RS
example:ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
- PFMC: 持久防火墙标记连接;将来自于同一客户端对指定服务(端口)的请求,始终定向至此选定的RS;不过它可以将两个毫不相干的端口定义为一个集群服务
# iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 80 -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 443 -j MARK --set-mark 10
# service iptables save
# ipvsadm -A -f 10 -s wlc -p 120