HAProxy
- HAProxy是法国开发者威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,
- 具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,
- 支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计
HAProxy调度算法
- HAProxy通过固定参数 balance 指明对后端服务器的调度算法,该参数可以配置在listen或backend选项中。
- HAProxy的调度算法分为静态和动态调度算法,但是有些算法可以根据参数在静态和动态算法中相互转换。
HAProxy调度算法总结
静态调度算法
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。
- static-rr--------->tcp/http 加权静态轮询
#做了session共享的web集群
- first------------->tcp/http 列表优先,榨干前任再调下一任
#会忽略服务器的权重设置,使用较少
动态调度算法
动态算法:基于后端服务器状态进行调度适当调整,新请求将优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
- roundrobin-------->tcp/http 动态加权轮询
#默认算法,常用
- leastconn--------->tcp/http 动态最少链接数
#数据库,长连接
- random------------>tcp/http 基于随机数作为一致性hash的key随机调度,支持加权
#随机负载平衡对于大型服务器场或经常添加或删除服务器非常有用
动静结合调度算法
即可作为静态算法,又可以通过选项成为动态算法
以下静态和动态取决于hash_type是否consistent
- source------------>tcp/http 源地址哈希,来自同一地址的一直连同一个服务器
#基于客户端公网IP的会话保持
- Uri--------------->http 访问地址哈希,访问相同Uri的一直连同一个服务器
#缓存服务器,CDN服务商,蓝汛、百度、阿里云、腾讯
- url_param--------->http 访问地址中一段哈希哦
#基于域名后缀ID可以实现session保持,需要结合应用实际情况使用
- hdr--------------->http 针对用户每个http头部(header)请求中的指定信息做hash
#基于客户端请求报文头部做下一步处理,可以实现桌面端和移动端等访问效果分离
- rdp-cookie-------->tcp 对远windows远程桌面的负载,使用cookie保持会话
#基于Windows主机RDP远程桌面协议,很少使用