1? 概述
本文將介紹haproxy用到的10中調(diào)度算法和hash算法仇奶,haproxy由命令balance指定后端服務(wù)器組內(nèi)的服務(wù)器調(diào)度算法
2? 調(diào)度算法介紹
定義算法格式
balance? ?[ ]
balance url_param ?[check_post]
.調(diào)度算法總共10種,注意和lvs的十種不一樣:
roundrobin:
基于權(quán)重輪詢闸昨,動(dòng)態(tài)算法,支持權(quán)重的運(yùn)行時(shí)調(diào)整舷礼,這個(gè)和lvs的rr不一樣欠痴,相當(dāng)于是lvs的wrr,且是動(dòng)態(tài)算法熙暴。支持慢啟動(dòng),指新加的服務(wù)器不會(huì)馬上啟用稚瘾,如原來(lái)兩臺(tái)牡昆,后面加了一臺(tái),請(qǐng)求是慢慢加到新的服務(wù)器上的摊欠,不是一次直接加滿三分之一的請(qǐng)求丢烘。每個(gè)后端backend中最多支持4095個(gè)server
server options:weight#
static-rr:
基于權(quán)重輪詢,靜態(tài)算法些椒,不支持權(quán)重的運(yùn)行時(shí)調(diào)整及慢啟動(dòng)播瞳;后端主機(jī)數(shù)量無(wú)上限
leastconn:
加權(quán)最少連接,動(dòng)態(tài)算法免糕,最少連接的后端服務(wù)器優(yōu)先分配接收新連接狐史,相同連接時(shí)輪詢,推薦在較長(zhǎng)會(huì)話的場(chǎng)景使用说墨,例如MySQL骏全、LDAP等,不適合http
first:
根據(jù)服務(wù)器在列表中的位置尼斧,自上而下進(jìn)行調(diào)度姜贡;前面服務(wù)器的連接數(shù)達(dá)到上限,新請(qǐng)求才會(huì)分配給下一臺(tái)服務(wù)棺棵。一般不設(shè)置該調(diào)度方法楼咳,可以用于測(cè)試環(huán)境
source:
源地址hash,新連接先按權(quán)重分配烛恤,后續(xù)連接按source分配請(qǐng)求母怜。起到會(huì)話綁定的作用,但是調(diào)度粒度太粗缚柏,使用的少苹熏,相當(dāng)于是ip hash.
uri:
對(duì)URI的左半部分或整個(gè)uri做hash計(jì)算,并除以服務(wù)器總權(quán)重取模,以后派發(fā)至某挑出的服務(wù)器,適用于后端緩存服務(wù)器
請(qǐng)求:://:@:/;?#
左半部分uri:/;
整個(gè)uri:/;?#
url_param:
對(duì)用戶請(qǐng)求的uri僅部分中的參數(shù)的值作hash計(jì)算轨域,并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器袱耽;通常用于追蹤用戶,以確保來(lái)自同一個(gè)用戶的請(qǐng)求始終發(fā)往同一個(gè)BackendServer
hdr():
對(duì)于每個(gè)http請(qǐng)求干发,此處由指定的http首部將會(huì)被取出做hash計(jì)算朱巨;并由服務(wù)器總權(quán)重相除以后派發(fā)至某挑出的服務(wù)器;無(wú)有效值的會(huì)被輪詢調(diào)度枉长,根據(jù)首部信或者是cookie息進(jìn)行調(diào)度冀续,
如根據(jù)cookie:hdr(Cookie)
根據(jù)首部:hdr(host)
rdp-cookie
遠(yuǎn)程桌面相關(guān),一般用于虛擬化
rdp-cookie ()
表示根據(jù)據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求必峰。
3哈希算法
格式:hash-type ? ? ?
method有以下兩種:
map-based:除權(quán)取余法沥阳,哈希數(shù)據(jù)結(jié)構(gòu)是靜態(tài)數(shù)組,一個(gè)服務(wù)器故障將重新計(jì)算所有的hash值自点,不建議用這個(gè)配置
consistent:一致性哈希桐罕,哈希數(shù)據(jù)結(jié)構(gòu)是一棵樹(shù),建議使用桂敛。
如基于uri調(diào)度功炮,同時(shí)設(shè)置了hash一致性
balance uri
hash-type? consistent
:哈希函數(shù)三種:sdbm,djb2术唬,wt6