文章目錄
- 一、概述
- 1、HAProxy簡介
- 2、HAProxy特點和優點:
- 3、HAProxy保持會話的三種解決方法
- 4、HAProxy的balance 8種負載均衡算法
- 1)RR(Round Robin)
- 2)LC(Least Connections)
- 3)SH(Source Hashing)
- 4)uri(資源標識符)
- 5)url\_param(資源定位符)
- 6)rdp—cookie(name)
- 7) source
- 8) static-rr
- 5、HAProxy 主要工作模式
- 二、haproxy 負載均衡(基于nginx)
- 三、KHN Triad
- 總結
一、概述
1、HAProxy簡介
官網:http://www.haproxy.com
HAProxy 是法國人Willy Tarreau開發的一個開源軟件,是一款應對客戶端10000以上的同時連接的高性能的TCP和 HTTP負載均衡器。其功能是用來提供基于cookie的持久性, 基于內容的交換,過載保護的高級流量管制,自動故障切換 ,以正則表達式為基礎的標題控制運行時間,基于Web的報表,高級日志記錄以幫助排除故障的應用或網絡及其他功能。
HAProxy 提供高可用性、負載均衡以及基于TCP和HTTP的應用代理,支持虛擬主機,它是免費、快速并且可靠的一種負載均衡解決方案。適合處理高負載站點的 七層 數據請求。類似的代理服務可以屏蔽內部真實服務器,防止內部服務器遭受攻擊。
2、HAProxy特點和優點:
- 支持原生SSL,同時支持客戶端和服務器的SSL.
- 支持IPv6和UNIX套字節(sockets)
- 支持HTTP Keep-Alive
- 支持HTTP/1.1壓縮,節省寬帶
- 支持優化健康檢測機制(SSL、scripted TCP、check agent…)
- 支持7層負載均衡。
- 可靠性和穩定性非常好。
- 并發連接 40000-50000個,單位時間處理最大請求 20000個,最大數據處理10Gbps.
- 支持8種負載均衡算法,同時支持session保持。
- 支持虛擬主機。
- 支持連接拒絕、全透明代理。
- 擁有服務器狀態監控頁面。
- 支持ACL(access control list)。
3、HAProxy保持會話的三種解決方法
HAProxy為了讓同一客戶端訪問服務器可以保持會話。有三種解決方法:客戶端IP、Cookie以及Session。
-
通過 客戶端IP 進行Hash計算并保存,以此確保當相同IP訪問代理服務器可以轉發給固定的真實服務器。
-
依靠真實服務器發送客戶端的 Cookie信息 進行會話保持。
-
將保存真實服務器的 Session 以及服務器標識 ,實現會話保持。
(HAProxy只要求后端服務器能夠在網絡聯通,也沒有像LVS那樣繁瑣的ARP配置)
4、HAProxy的balance 8種負載均衡算法
1)RR(Round Robin)
RR算法是最簡單最常用的一種算法,即輪詢調度
理解舉例:有三個節點A、B、C
第一個用戶訪問會被指派到節點A
第二個用戶訪問會被指派到節點B
第三個用戶訪問會被指派到節點C
第四個用戶訪問繼續指派到節點A,輪詢分配訪問請求實現負載均衡效果
2)LC(Least Connections)
最小連接數算法,根據后端的節點連接數大小動態分配前端請求
理解舉例: 有三個節點A、B、C,各節點的連接數分別為A:4 B:5 C:6
第一個用戶連接請求,會被指派到A上,連接數變為A:5 B:5 C:6
第二個用戶請求會繼續分配到A上,連接數變為A:6 B:5 C:6;再有新的請求會分配給B,每次將新的請求指派給連接數最小的客戶端
由于實際情況下A、B、C的連接數會動態釋放,很難會出現一樣連接數的情況
此算法相比較rr算法有很大改進,是米錢用到比較多的一種算法
3)SH(Source Hashing)
基于來源訪問調度算法,用于一些有Session會話記錄在服務端的場景,可以基于來源的IP、Cookie等做集群調度
理解舉例 有三個節點A、B、C,第一個用戶第一次訪問被指派到了A,第二個用戶第一次訪問被指派到了B
當第一個用戶第二次訪問時會被繼續指派到A,第二個用戶第二次訪問時依舊會被指派到B,只要負載均衡器不重啟,第一個用戶都會被指派到A,第二個用戶訪問都會被指派到B,實現集群的調度
此調度算法好處是實現會話保持,但某些IP訪問量非常大時會引起負載不均衡,部分節點訪問量超大,影響業務使用
4)uri(資源標識符)
表示根據請求的URI,做cdn(內容分發網絡)需使用
5)url_param(資源定位符)
表示根據HTTP請求頭來鎖定每 一 次HTTP請求。
6)rdp—cookie(name)
表示根據據cookie (name)來鎖定并哈希每一次TCP請求。
7) source
表示根據請求的源IP,類似Nginx的IP hash機制。
8) static-rr
表示根據權重,輪詢
5、HAProxy 主要工作模式
tcp模式:在客戶端和服務器之間將建立一個全雙工的連接,且不會對7層的報文做任何處理的簡單模式。 通常用于SSL、SSH、SMTP等應用層。
http模式(一般使用):客戶端請求在轉發給后端服務器之前會被深度分析,所有不與RFC格式兼容的請求都會被拒絕。
二、haproxy 負載均衡(基于nginx)
1.安裝haproxy
2.配置文件
vim /etc/haproxy/haproxy.cfg
配置完后加入
listen stats #定義監控頁面 mode httpoption httplogbind *:1080 #綁定端口1080 stats refresh 30s #每30秒更新監控數據 stats uri /stats #訪問監控頁面的uri stats realm HAProxy\ Stats #監控頁面的認證提示 stats auth admin:admin #監控頁面的用戶名和密碼
3.驗證
啟動服務
輪詢:
三、KHN Triad
使用 keepalive 監控 haproxy 實現 nginx 的 負載均衡
1.準備兩臺服務器,修改名稱為kn1,kn2并安裝安裝 keepalive 與 haproxy
2.配置文件
kn1:
vim /etc/keepalived/keepalived.conf
vim /etc/haproxy/haproxy.cfg
kn2:
vim /etc/keepalived/keepalived.conf
vim /etc/haproxy/haproxy.cfg
3.腳本編寫
kn1,kn2
cat check_khn_nginx.sh
#! /bin/bashnumber=$(ps -C haproxy --no-headers | wc -l)
if [$number -eq 0 ];thensystemctl stop keepalivedexit 1else exit 0
fi
kn1:cat add_dnat.sh
#!/bin/bash
#將訪問的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.100:80```bash
kn2:cat add_dnat.sh
#!/bin/bash
#將訪問的 192.168.100.3的流量 DNAT 到192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.101:80#轉發監控頁面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.101:1080
#轉發監控頁面(1080)流量到 192.168.100.100
iptables -t nat -A PREROUTING -d 192.168.100.3 -p tcp --dport 1080 -j DNAT --to-destination 192.168.100.100:1080
```bash
cat remove_dnat.sh
#!/bin/bash
#清理DNAT規則
iptables -t nat -F
4.啟動服務并驗證
5.故障模擬
停用kn1的haproxy
kn2變成主:
依然可以訪問:
總結
以上就是haproxy負載均衡,希望可以幫助到其他小伙伴們