關于haproxy負載均衡的算法整理
目前haproxy支持的負載均衡算法有如下8種
1、roundrobin
表示簡單的輪詢,每個服務器根據權重輪流使用,在服務器的處理時間平均分配的情況下這是最流暢和公平的算法。該算法是動態的,對于實例啟動慢的服務器權重會在運行中調整。
2、leastconn
連接數最少的服務器優先接收連接。leastconn建議用于長會話服務,例如LDAP、SQL、TSE等,而不適合短會話協議。如HTTP.該算法是動態的,對于實例啟動慢的服務器權重會在運行中調整。
3、static-rr
每個服務器根據權重輪流使用,類似roundrobin,但它是靜態的,意味著運行時修改權限是無效的。另外,它對服務器的數量沒有限制。
該算法一般不用;
4、source
對請求源IP地址進行哈希,用可用服務器的權重總數除以哈希值,根據結果進行分配。只要服務器正常,同一個客戶端IP地址總是訪問同一個服務器。如果哈希的結果隨可用服務器數量而變化,那么客戶端會定向到不同的服務器;
該算法一般用于不能插入cookie的Tcp模式。它還可以用于廣域網上為拒絕使用會話cookie的客戶端提供最有效的粘連;
該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
5、uri
表示根據請求的URI左端(問號之前)進行哈希,用可用服務器的權重總數除以哈希值,根據結果進行分配。只要服務器正常,同一個URI地址總是訪問同一個服務器。一般用于代理緩存和反病毒代理,以最大限度的提高緩存的命中率。該算法只能用于HTTP后端;
該算法一般用于后端是緩存服務器;
該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
6、url_param
在HTTP GET請求的查詢串中查找<param>中指定的URL參數,基本上可以鎖定使用特制的URL到特定的負載均衡器節點的要求;
該算法一般用于將同一個用戶的信息發送到同一個后端服務器;
該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
7、hdr(name)
在每個HTTP請求中查找HTTP頭<name>,HTTP頭<name>將被看作在每個HTTP請求,并針對特定的節點;
如果缺少頭或者頭沒有任何值,則用roundrobin代替;
該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。
8、rdp-cookie(name)
為每個進來的TCP請求查詢并哈希RDP cookie<name>;
該機制用于退化的持久模式,可以使同一個用戶或者同一個會話ID總是發送給同一臺服務器。如果沒有cookie,則使用roundrobin算法代替;
該算法默認是靜態的,所以運行時修改服務器的權重是無效的,但是算法會根據“hash-type”的變化做調整。