HAProxy 負載均衡配置

一、HAProxy簡介
HAProxy是一種高效、可靠、免費的高可用及負載均衡解決方案,非常適合於高負載站點的七層數據請求。(HAProxy可以基於四層和七層提供TCP和HTTP(select mode,根據報文內容)應用的負載均衡綜合解決方案。)因為HAProxy實現瞭一種事件驅動、單一進程模型,此模型支持非常大的並發連接數。客戶端通過HAProxy代理服務器獲得站點頁面,而代理服務器收到客戶請求後根據負載均衡的規則將請求數據轉發給後端真實服務器。HAProxy還支持Session的保持和Cookie的引導。
同一客戶端訪問服務器,HAProxy保持會話的三種方案:
1、 HAProxy將客戶端ip進行Hash計算並保存,由此確保相同IP訪問時被轉發到同一真實服務器上。( 配置:balance source)
2、 HAProxy依靠所使用的服務器發送給客戶端的cookie信息進行會話保持。
3、 HAProxy保存所使用的服務器的session及服務器標識,實現會話保持功能。
二、HAProxy工作原理
HAProxy有前端(frontend)和後端(backend),前端和後端都可以有多個。也可以隻有一個listen塊來同時實現前端和後端。這裡主要講一下frontend和backend工作模式。 前端(frontend)區域可以根據HTTP請求的header信息來定義一些規則,然後將符合某規則的請求轉發到相應後端(backend)進行處理。因此HAProxy可以實現動靜分離(動靜分離簡單來說就是指將靜態請求轉發到對應的靜態資源服務器,將動態請求轉發到動態資源服務器)
三、HAProxy配置文件
修改haproxy的主配置文件 vim /etc/haproxy/haproxy.cfg(haproxy不處理SSL時,mode應為tcp)
vim /etc/haproxy/haproxy.cfg
#修改內容如下:
frontend main
bind *:80
default_backend webservers

backend webservers
balance roundrobin
server app1 192.168.1.105:80 check
server app2 192.168.1.106:80 check
Round Robin算法
輪詢調度(Round Robin Scheduling)算法就是以輪詢的方式依次將請求調度不同的服務器,即每次調度執行i = (i + 1) mod n,並選出第i臺服務器。 算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。僅有兩臺服務器的話,會在兩臺服務器間輪流轉發請求。
會話保持的第一種方法:基於source算法,確保相同IP訪問時被轉發到同一真實服務器上。
Source算法
1)把balance調度算法改為source:
vim /etc/haproxy/haproxy.cfg
backend webservers
balance source
#自於同一IP的請求,始終定向至同一臺
RI(url)算法
1)把balance調度算法改為uri:
vim /etc/haproxy/haproxy.cfg
backend webservers
balance uri
server app1 192.168.1.105:80 check
server app2 192.168.1.106:80 check
#uri的機制,對同一個uri(資源)的請求,始終定義至同一個server上。無論從哪個客戶端訪問test1.html, 都指向的是web2上面的test1.html;無論從哪個客戶端訪問test2.html, 都指向的是web1上面的test2.html,與客戶端IP無關,與每個服務端請求次數無關,與使用的客戶端類型無關。
四、HAProxy負載均衡-會話保持
也就是我們在簡介中提到的第二種設置會話保持的方法,HAProxy依靠真實服務器發送給客戶端的cookie信息(也就是瀏覽器端的緩存信息中會包含服務器的node信息, 如web1 或者 是web2, 從而該瀏覽器下次訪問時還會訪問之前訪問過的web服務器。)進行會話保持。
vim /etc/haproxy/haproxy.cfg

backend webserver
cookie node insert nocache
stats enable
server web1 ip1:port check node1
server web2 ip2:port check node2

#重載haproxy
systemctl reload haproxy

配置haproxy動靜分流
LOADING
配置haproxy域名分流(SNI,Server Name Indication)(SSL)

LOADING
五、HAProxy後端web服務器狀態檢測(災備)
HAProxy有三種狀態檢測方式: 1).基於四層的傳輸端口做狀態監測 2).基於指定的uri做狀態監測 3).基於指定的URI的resquest請求頭部內容做狀態監測
1. 基於四層的傳輸端口做狀態監測
通過監聽端口進行健康檢測。這種檢測方式,haproxy檢查後端server的端口,並不能保證服務的真正可用。有時候服務端口監聽和進程都是存在的,不代表正常提供服務,這時使用基於端口的監聽方式明顯就不太合適瞭。
vim /etc/haproxy/haproxy.cfg
#inter 時間間隔

backend webserver
balance roundrobin
cookie HAPROXY-COOKIE insert indirect nocache
server web1 ip1:port check port xx addr ip inter 3000 fail 3 rise 5
server web2 ip2:port check port xx addr ip inter 3000 fail 3 rise 5

#重載haproxy
systemctl reload haproxy

2. 基於指定的uri做狀態監測
用GET後端server的的web頁面,基本上可以代表後端服務的可用性。模擬客戶端去訪問服務端,如果響應碼是正常的說明服務端處於正常工作狀態,避免瞭基於端口監控的弊端。
vim /etc/haproxy/haproxy.cfg

listen webserver
mode http
bind *:80
balance roundrobin
cookie HAPROXY-COOKIE insert indirect nocache
option httpchk GET / URI
server web1 ip1:port check cookie node1 check
server web2 ip2:port check port xx addr ip inter 3000 fail 3 raise 5

#重載haproxy
systemctl reload haproxy

3. 基於指定的URI的resquest請求頭部內容做狀態監測
拋棄消息體(body)部分,隻返回給haproxy響應頭部(head)信息即可,節省瞭後端web服務器的網絡I/O。
#LOADING


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/50605/