HAProxy 调度算法


静态算法

  • 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容