HAProxy 之 算法介紹
1 概述
本文將介紹haproxy用到的10中調度算法和hash算法,haproxy由命令balance指定後端服務器組內的服務器調度算法
2 調度算法介紹
定義算法格式
balance <algorithm> [ <arguments> ]
balance url_param <param> [check_post]
.調度算法總共10種,註意和 lvs的十種不一樣:
roundrobin:
基於權重輪詢,動態算法,支持權重的運行時調整,這個和lvs的rr不一樣,相當於是lvs的wrr,且是動態算法。支持慢啟動,指新加的服務器不會馬上啟用,如原來兩臺,後面加了一臺,請求是慢慢加到新的服務器上的,不是一次直接加滿三分之一的請求。每個後端
server options:weight#
static-rr:
基於權重輪詢,靜態算法,不支持權重的運行時調整及慢啟動;後端主機數量無上限
leastconn:
加權最少連接,動態算法,最少連接的後端服務器優先分配接收新連接,相同連接時輪詢,推薦在較長會話的場景使用,例如MySQL、LDAP等,不適合http
first:
根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務。一般不設置該調度方法,可以用於測試環境
source:
源地址hash,新連接先按權重分配,後續連接按source分配請求。起到會話綁定的作用,但是調度粒度太粗,使用的少,相當於是
uri:
對URI的左半部分或整個uri做hash計算,並除以服務器總權重取模,以後派發至某挑出的服務器,適用於後端緩存服務器
請求:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
左半部分uri:/<path>;<params>
整個uri:/<path>;<params>?<query>#<frag>
url_param
對用戶請求的uri僅<params>部分中的參數的值作hash計算,並由服務器總權重相除以後派發至某挑出的服務器;通常用於追蹤用戶,以確保來自同一個用戶的請求始終發往同一個BackendServer
hdr(<name>):
對於每個http請求,此處由<name>指定的http首部將會被取出做hash計算;並由服務器總權重相除以後派發至某挑出的服務器;無有效值的會被輪詢調度,根據首部信或者是cookie息進行調度,
如根據cookie:hdr(Cookie)
根據首部:hdr(host)
rdp-cookie
遠程桌面相關,一般用於虛擬化
rdp-cookie (<name>)
表示根據據cookie(name)來鎖定並哈希每一次TCP請求。
3 哈希算法
格式:hash-type <method> <function> <modifier>
method有以下兩種:
map-based:除權取余法,哈希數據結構是靜態數組,一個服務器故障將重新計算所有的hash值,不建議用這個配置
consistent:一致性哈希,哈希數據結構是一棵樹,建議使用。
如基於uri調度,同時設置了hash一致性
balance uri
hash-type consistent
<function>: 哈希函數三種:sdbm,djb2,wt6
本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1978989
HAProxy 之 算法介紹