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远程桌面协议,很少使用