haproxy调度算法

默认情况下是轮询。

1.1 静态算法

无法实时修改权重,必须重启haproxy。

#动态方式修改权重

yum install socat
#安装socat

echo "help" | socat stdio /apps/haproxy/haproxy.sock
#将help传给haproxy.sock 查看可用指令

echo "show info" | socat stdio /apps/haproxy/haproxy.sock
#查看haproxy运行状态

echo "get weight web-app1/web1 2" | socat stdio /apps/haproxy/haproxy.sock
#获取web-app1的后端服务器web1的权重

echo "set weight web-app1/web1 2" | socat stdio /apps/haproxy/haproxy.sock
#将web-app1的后端服务器web1的权重修改为2

echo "disable server web-app1/web1 2" | socat stdio /apps/haproxy/haproxy.sock
echo "enable server web-app1/web1 2" | socat stdio /apps/haproxy/haproxy.sock
#关闭/打开web-app1的后端服务器web1。
1.1.1 static-rr 静态轮询

静态轮询,无法动态调整权重值。因为轮询各后端的服务器都是相等的(或者某台后端服务器的权重是0,即不进行转发)。

1.2.2 first

根据配置文件中的顺序进行转发。第一个服务器占完之后,才会将请求发给第二位的服务器。基本上不会使用。

1.2 动态算法

可以动态调整,将请求转发到较低负载的后端服务器上。且可以动态调整权重。

1.2.1 roundrobin(haproxy默认调度算法)

基于权重的轮询动态调度算法,支持权重的运行时调整。支持慢启动(对于新添加的后端服务器,负载缓慢增加,避免刚启动的服务接受太多连接。)每个后端backend中支持最多4095个real server。

1.2.2 leastconn

当前后端服务器中连接最少的优先调度。比较适合长连接使用,如mysql等。

1.2.3 hdr

对header请求中指定信息做hash。若值无效,则使用默认的轮询调度。

配置范例

balance hdr(User-Agent)
#取请求头中的user-agent进行hash
hash-type consistent
1.2.4 rdp-cookie

可以实现对windows远程桌面负载,如果后端有多个windows 服务器,rdp-cookie可以实现同一个请求始终被转发给同一个后端服务器。如果此前从未访问,第一次连接时使用roundrobin算法计算出一个后端服务器进行转发。

配置范例

listen RDP
  bind 192.168.1.1:3389
  mode tcp
  balance rdp-cookie
  persist rdp-cookie
  tcp-request inspect-delay 5s
  tcp-request content accept if RDP_COOKIE
  server win-server1 192.168.1.2:3389 check fall 3 raise 5 inter 2s weight 1 
1.2.4 random

1.9版本后增加random算法,基于一个随机值作为一致性hash的key,随机负载平衡对于大型服务器场合或经常添加或删除服务器非常有用。

balance random

1.3 算法总结

static rr    =>    tcp/http    静态
frist        =>    tcp/http    静态

roundrobin    =>    tcp/http    动态
leastconn    =>    tcp/http    动态
random        =>    tcp/http    动态

source        =>    tcp/http
uri            =>    http
url_param    =>    http    取决于hash_type是否consistent
hdr            =>    http
rdp-cookie    =>    tcp

1.4 算法应用场景

frist    =>    #使用较少

static-rr    =>    #做了session共享的web集群
rounderobin    =>
random    =>

leastsonn =>    #数据库
source =>    #基于客户端公网IP的会话保持

uri    =>http    #缓存服务器,CDN服务器
url_param    =>http

hdr    =>    #基于客户端请求报文头部做下一步处理

rdp-cookie    =>    #很少使用

标签: none

添加新评论