文章目录
Haproxy常见的负载均衡调度算法及应用场景
HAproxy通过固定参数balance指明对后端服务器的调度算法,该参数可以配置在listen或backend选项中
HAproxy的调度算法分为静态和动态算法,但是有些算法可以根据参数在静态和动态算法中相互转换
#官方文档 https://cbonte.github.io/haproxy-dconv/2.0/configuration.html#4
balance <algorithm> [ <arguments> ]
1 haproxy 静态调度算法
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载,链接数和相应速度等。且无法实时修改权重,只能靠重启HAproxy生效
服务器动态权重调整:
#socat是linux下的一个多功能的网络工具
主要特点:就是在两个数据流之间建立通道,且支持众多协议和链接方式。如:IP/UDP/IPV6/Socket文件等
# [root@haproxy ~]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock
# [root@haproxy ~]# echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
1.1 static-rr
static-rr :静态加权轮询;
静态算法,不支持权重的运行时调整及慢启动机制;权重在服务器运行时改变了也不生效,除非重启服务器,而重启会导致此前所有连接断开,然后才重新调度的;但后端主机无数量上限;当服务器掉线时,健康状态检测又恢复上线时,立即加入服务器列表中取,且立即调度大量连接请求至此服务器,没有慢启动功能;而roundrobin则会慢慢调度请求至服务器
基于权重轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制
listen webapps
bind 192.168.66.7:80
mode tcp
log global
balance static-rr
# hash-type consistent
server web1 172.20.21.17:80 weight 2 check inter 3000 fall 2 rise 5
server web2 172.20.21.27:80 check inter 3000 fall 2 rise 5
1.2 first
first: 根据服务器在列表中的位置,自上而下进行调度;前面的服务器连接数达到上限时,才将新请求调度至下一个服务器;这种算法好处在于可省服务器;要保证单台服务器支撑多个连接时没有问题,性能还支撑一个没有什么区别时会很有用;每一个后端主机要定义最大并发连接数上限;在定义最大连接数时可以定义在三个位置:全局的最大并发连接数上限、每个frontend或listen的最大并发连接数上限、后端主机最大并发连接数上限;
listen webapps
bind 192.168.66.7:80
#mode tcp
#log global
balance fir