1. 程式人生 > >HAProxy 之 算法介紹

HAProxy 之 算法介紹

haproxy 算法

1 概述


本文將介紹haproxy用到的10中調度算法和hash算法,haproxy由命令balance指定後端服務器組內的服務器調度算法


2 調度算法介紹


定義算法格式

balance <algorithm> [ <arguments> ]

balance url_param <param> [check_post]

.調度算法總共10種,註意和 lvs的十種不一樣:

roundrobin

基於權重輪詢,動態算法,支持權重的運行時調整,這個和lvsrr不一樣,相當於是lvs的wrr,且是動態算法。支持慢啟動,指新加的服務器不會馬上啟用,如原來兩臺,後面加了一臺,請求是慢慢加到新的服務器上的,不是一次直接加滿三分之一的請求。每個後端

backend中最多支持4095server

server optionsweight#

static-rr

基於權重輪詢,靜態算法,不支持權重的運行時調整及慢啟動;後端主機數量無上限

leastconn

加權最少連接,動態算法,最少連接的後端服務器優先分配接收新連接,相同連接時輪詢,推薦在較長會話的場景使用,例如MySQLLDAP等,不適合http

first

根據服務器在列表中的位置,自上而下進行調度;前面服務器的連接數達到上限,新請求才會分配給下一臺服務。一般不設置該調度方法,可以用於測試環境

source

源地址hash,新連接先按權重分配,後續連接按source分配請求。起到會話綁定的作用,但是調度粒度太粗,使用的少,相當於是

ip hash.

uri

URI的左半部分或整個urihash計算,並除以服務器總權重取模,以後派發至某挑出的服務器,適用於後端緩存服務器

請求:<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>: 哈希函數三種:sdbmdjb2wt6



本文出自 “陽光運維” 博客,請務必保留此出處http://ghbsunny.blog.51cto.com/7759574/1978989

HAProxy 之 算法介紹