一、Haproxy配置介紹:
- HaProxy配置(haproxy.cfg)中分爲五部分內容(五大組件),可以根據需要選擇進行配置。
- 五大組件:global、defaults、frontend、backend、listen
1、global:參數是進程級的,通常和操作系統(OS)相關。這些參數一般只設置一次,如果配置無誤,就不需要再次配置進行修改。
2、defaults:配置默認參數的,這些參數可以被利用配置到frontend,backend,listen組件。
3、frontend:接收請求的前端虛擬節點,Frontend可以根據規則直接指定具體使用後端的 backend(可動態選擇)。
4、backend:後端服務集羣的配置,是真實的服務器,一個Backend對應一個或者多個實體服務器。
5、listen:Frontend和Backend的組合體。
二、Haproxy負載均衡算法介紹:
balance roundrobin # 輪詢,軟負載均衡基本都具備這種算法
balance static-rr # 根據權重,建議使用
balance leastconn # 最少連接者先處理,建議使用
balance source # 根據請求源IP,建議使用
balance uri # 根據請求的URI
balance url_param # 根據請求的URl參數'balance url_param' requires an URL parameter name
balance hdr(name) # 根據HTTP請求頭來鎖定每一次HTTP請求
balance rdp-cookie(name) # 根據據cookie(name)來鎖定並哈希每一次TCP請求
三、用戶Session保持、共享:
由於用戶請求經過Haproxy處理轉發到不同服務器之後,可能導致Session會話不同步的問題,若想實現會話共享或保持,可採用如下3種方式:
1、基於IP地址:
配置:balance source
實現原理:類似Nginx的IP_Hash,將用戶IP經過Hash對比判斷之後,將請求轉發到後端服務器。
2、基於Cookie識別:
配置:cookie SESSION_COOKIE insert indirect nocache
實現原理:向Web服務器端發送給客戶端的Cookie中插入(或添加加前綴)haproxy定義的後端的服務器COOKIE ID。
3、基於Session識別:
配置:appsession JSESSIONID len 64 timeout 5h request-learn
實現原理:Haproxy將後端服務器產生的session和後端服務器標識存在haproxy中的一張表裏。客戶端請求時先查詢這張表。
參考文章:
https://www.douban.com/note/275230796/