简述Haproxy常见的负载均衡调度算法及应用场景详解

HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,其负载均衡的调度算法包括以下几种。

1、roundrobin
动态加权轮询算法,支持运行时调整权重以及慢启动机制;最大支持4095个后端主机;此算法为动态算法,会根据后端主机的启动快慢调整权重。当服务器的处理时间保持平均分配时,此算法是运行最流畅和公平的。

2、static-rr
静态轮询算法,此算法类似于roundrobin,但是不支持运行时调整权重及慢启动机制,每个服务器根据权重轮流使用。此算法对服务器数量没有限制。
3、leastconn
最小连接数算法,连接数最少的服务器优先接收连接。建议用于长会话场景中使用,例如LDAP、SQL等协议,而不适合短会话协议。如HTTP。此算法为动态算法,会根据后端主机的启动快慢调整权重。
4、first
根据服务器在列表中的位置,自上而下进行调度;前面服务器的连接数达到上限,新请求才会分配给下一台服务。一般不设置该调度方法,可以用于测试环境
5、source
源地址hash算法,首先此算法会根据源地址生成hash值,然后报文根据权重分配给后端服务器。回来的报文会根据源地址计算得到的hash来决定使用哪一个后端服务器,此算法目的是确保来自于同一个IP的主机使用同一个后端主机。此算法默认是静态算法,即运行期间修改权重并不会影响算法运行,但是这种方式可通过修改hash-type来调整。
6、uri
此算法会对RI的左半部分或整个uri做hash计算,并除以服务器总权重取模,以后派发至指定的的服务器,适用于后端缓存服务器。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
7、url_param
对用户请求的uri的部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。
8、hdr(name)
对于每个http请求,此处由指定的http首部将会被取出做hash计算; 并由服务器总权重相除以后派发至某挑出的服务器;没有有效值的会被轮询调度;

  • hash-type
    hash-type算法类型:可作用于所有需要进行hash计算的算法中,在balance 指令中选定与hash 有关的算法,都会受此影响。可在defaults,listen,backend中定义。
    配置格式:
hash-type   

默认采用的方法为map-based,其他常见的方法有:

map-based:取模法,hash数据结构是静态数组;该hash是静态的,不支持在线调整权重,不支持慢启动;
该算法调度平滑,后端服务器能够均匀承受负载;缺点也是明显的:当服务器的总权重发生变化时,即有服务器上线或下线,都会导致调度结果整体改变。如果想避免此种情况应采用consistent 方法;
consistent:一致性哈希,哈希的数据结构是“树”;该hash是动态的,支持在线调整权重,支持慢启动
每一个server 会在"树"中出现多次, 在树中查找hash key,并选择最近的server;该方法的优点在于,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动。所以十分适合缓存服务器;

HAProxy的调度算法官方文档:http://cbonte.github.io/haproxy-dconv/1.9/configuration.html

你可能感兴趣的:(简述Haproxy常见的负载均衡调度算法及应用场景详解)