美文网首页
HAProxy 调度算法

HAProxy 调度算法

作者: Alexander_Zz | 来源:发表于2019-03-20 21:45 被阅读0次

    静态算法

    • balance:指明对后端服务器的调度算法,配置在 listen 或 backend
    • 静态算法:按照事先定义号的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度等,且无法实时修改权重,只能重启后生效
    • static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制
    • first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的链接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置

    动态调度算法

    • 动态算法:基于后端服务器状态进行调度适当调整,比如有限调度至当前堵在较低的服务器,且权重可以再 haproxy 运行时动态调整无需重启
    • roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不等于 lvs 的 rr,支持慢启动即新加的服务器会主键增加转发数,每个后端 backend 中最多支持 4095 个 server,为此默认调度算法,server 权重设置 weight
    • leastconn:加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少有限调度,笔记哦奥适合长连接的场景使用,比如 MySQL 等场景

    source 算法

    • source:源地址 hash,基于用户源地址 hash 并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过 hash-type 支持的选项更改,后续同一个源地址请求将被转发值同一个后端 web 服务器,比较使用与 session 保持等场景
    • map-based:取模法,基于服务器权重的 hash 数组取模,该 hash 时静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当度武器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变
    • consistent:一致性哈希,该 hash 是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起答的变动,该算法很容易导致后端服务器负载不均衡,但是比较合适 session 保持
      示例
    listen web_port_http_nodes
      bind 192.168.7.101:80
      node http
      balance source
      hash-type consistent
      log global
      option forwardfor
      server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
      server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
    

    uri 算法

    • uri:基于对用户请求的 uri 做 hash 并将请求转发到后端指定服务器
    • map-based:取模法
    • consistent:一致性哈希
      示例
    listen web_port_http_nodes
      bind 192.168.7.101:80
      mode http   # 不支持 tcp,会切换到 tcp 的 roundrobin 负载模式
      balance uri
      hash-type consistent
      log global
      option forwardfor
      server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3000 rise 5
      server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
    

    url_param 算法

    • url_param:对用户请求的 url 中的 <params> 部分中的参数 name 作 hash 计算,并由服务器总权重相除以后派发至某挑选出的服务器;通常用于追踪用户,以确保来自同一个用户的请求 发往同一个 Backend Server
    • 假设
      url=http://www.rookie.com/foo/bar/index.php?k1=v1&k2=v2

      host = "www.rookie.com"
      url_param = "k1=v1&k2=v2"
    • 示例
    listen web_port_http_nodes
      bind 192.168.7.101:80
      mode http   # 不支持 tcp,会切换到 tcp 的 roundrobin 负载模式
      balance url_param NAME   # 基于参数 NAME 做 hash
      hash-type consistent
      log global
      option forwardfor
      server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
      server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
    

    hdr 算法

    • hdr(<name>):针对用户每个 http 头部 (header) 请求中的指定信息做 hash,此处由 <name> 指定的 http 首部将会被去除并做 hash 计算,然后由服务器总权重相除以后派发至某挑选出的服务器,假如无有效值,则会被轮询调度
    • hdr (Cookie、User-Agent、host)
    listen web_port_http_nodes
      bind 192.168.7.101:80
      mode http
      balance hdr(User-Agent)
      hash-type consistent
      log global
      option forwardfor
      server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
      server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5
    

    image.png

    rdp-cookie 算法

    • rdp-cookie 对远程桌面的负载,使用 cookie 做会话保持
    • rdp-cookie(<name>)
    • 示例
    listen RDP
      bind 192.168.7.101:3389
      balance rdp-cookie
      mode tcp
      server rdp0 192.168.10.20:3389 check inter 2000 fall 3 rise 5 weight 1
      server rdp1 192.168.10.30:3389 check inter 2000 fall 3 rise 5 weight 1
    
    • 基于 iptables 实现目标地址转换
     ~]# iptables -t nat -A PREROUTING -d 192.168.7.101 -p tcp --dport 3389 -j DNAT --to-destination 192.168.10.20:3389
    ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/21 -j SNAT --to-source 192.168.7.101
    

    算法总结

    image.png

    相关文章

      网友评论

          本文标题:HAProxy 调度算法

          本文链接:https://www.haomeiwen.com/subject/pdrxvqtx.html