目錄
一、HAproxy
一、概念
二、核心作用
三、主要功能特性
四、應用場景
五、優勢與特點
二、 案例分析
1. 案例概述
2. 案例前置知識點
(1)HTTP 請求
(2)負載均衡常用調度算法
(3)常見的 web 群集調度器
三、實驗案例(HAproxy 搭建Web群集)
一、HAproxy
一、概念
HAProxy?是一款?開源、高性能的負載均衡與反向代理工具,基于?C 語言?開發,支持?四層(傳輸層)?和?七層(應用層)?流量處理,廣泛用于高并發場景下的服務調度、流量分發和系統高可用性保障。
- 核心定位:介于客戶端和后端服務器之間的中間層,將客戶端請求均勻分配到多個后端服務器,同時監控服務器狀態,確保請求高效、可靠地處理。
- 官網:www.haproxy.org
二、核心作用
- 負載均衡(Load Balancing)
- 將客戶端請求按預設算法(如輪詢、最少連接、源 IP 哈希等)分發到多個后端服務器,避免單點壓力過大,提升系統吞吐量。
- 高可用性(High Availability)
- 通過?健康檢查(如定期發送心跳包)實時監測后端服務器狀態,自動隔離故障節點,待節點恢復后重新納入負載均衡池,保障服務連續性。
- 會話保持(Session Persistence)
- 基于?Cookie、源 IP 或請求頭?等信息,將同一用戶的請求固定路由到同一后端服務器,確保會話狀態一致(如登錄用戶的請求始終由同一服務器處理)。
- 協議處理與轉發
- 四層代理:處理 TCP/UDP 流量,基于 IP + 端口轉發(如數據庫、Redis 服務)。
- 七層代理:解析 HTTP/HTTPS 協議,基于 URL、Header、Cookie 等應用層信息精細化路由(如 Web 服務、API 網關)。
- 流量優化與安全
- 支持 HTTP 壓縮、SSL 卸載(HTTPS 解密)、請求緩存,減少服務器負載;
- 提供基本的 ACL(訪問控制列表),阻擋惡意流量(如限制特定 IP 訪問)。
三、主要功能特性
特性 | 說明 |
---|---|
多模式支持 | - TCP 模式(四層):適用于任意基于連接的協議(如 MySQL、MQ); - HTTP 模式(七層):支持 HTTP/HTTPS 協議解析與處理。 |
負載均衡算法 | 支持輪詢(Round Robin)、最少連接(Least Connections)、源 IP 哈希(Source Hash)、URI 哈希等多種算法。 |
健康檢查機制 | 支持 HTTP/HTTPS、TCP、ICMP 等協議的健康檢查,可自定義檢查頻率、超時時間。 |
動態配置與熱更新 | 支持通過配置文件或 API 動態調整后端服務器列表,無需重啟服務即可生效。 |
監控與統計 | 內置?stats 頁面,實時展示請求量、錯誤率、服務器狀態等指標,便于運維監控。 |
連接管理優化 | 支持連接復用(Keep-Alive)、連接隊列管理,減少 TCP 三次握手開銷,提升并發性能。 |
四、應用場景
- Web 服務負載均衡
- 作為 Web 服務器(如 Nginx、Tomcat)的前端代理,按 URL 路徑、用戶地域等規則分流請求。
- API 網關與微服務架構
- 在微服務架構中,對 API 請求進行路由、流量控制和熔斷處理,保障服務穩定性。
- TCP 協議服務代理
- 為數據庫(如 MySQL、PostgreSQL)、消息隊列(如 Kafka、RabbitMQ)提供四層負載均衡,提升連接效率。
- 混合架構中的中間層
- 常與?LVS(四層負載均衡)?結合使用:LVS 作為流量入口進行初步分發,HAProxy 作為二級代理進行七層精細化處理。
五、優勢與特點
- 高性能:單臺服務器可支持數萬并發連接,吞吐量接近硬件負載均衡器(如 F5)。
- 輕量級與靈活性:配置簡單,支持復雜路由邏輯,適合中小規模集群和復雜業務場景。
- 穩定性:在金融、電商等對可用性要求高的行業中廣泛使用(如 GitHub、Spotify 等)。
- 開源免費:社區活躍,文檔豐富,支持二次開發。
典型架構 :
客戶端 <----> HAProxy(負載均衡與代理) <----> 后端服務器集群(Web/API/數據庫)↑└── 健康檢查 & 動態調度
二、 案例分析
1. 案例概述
HAproxy 是目前比較流行的群集調度工具,同類群集調度有很多,如LVS和Nginx.
LVS性能最好,但部署復雜;Nginx的upstream 模塊支持群集功能但對群集節點健康檢查功能不強,高并發性能沒有HAproxy好。
2. 案例前置知識點
(1)HTTP 請求
通過 URL 訪問網站使用協議是HTTP協議,稱為HTTP請求。
請求方式常見為GET和POST方式。當訪問時,會根據請求URL返回狀態碼。
關鍵步驟:
-
客戶端發送 HTTP 請求(方法 + URL + Headers + Body)
-
負載均衡器根據調度算法選擇后端節點
-
Web 服務器解析請求,訪問緩存/數據庫
-
生成響應(狀態碼 + Headers + HTML/JSON)
(2)負載均衡常用調度算法
算法 | 原理 | 適用場景 | 案例選擇 |
---|---|---|---|
輪詢 (RR) | 按序分配請求 | 服務器性能均衡 | 靜態資源分發 |
加權輪詢 (WRR) | 根據權重分配請求 | 服務器性能差異大 | Web 服務器集群 |
最小連接 (LC) | 優先選擇當前連接數最少的節點 | 長連接服務(如數據庫) | Redis 訪問 |
IP 哈希 (SH) | 相同 IP 固定分配到同一節點 | 需要會話保持的場景 | 用戶購物車 |
(3)常見的 web 群集調度器
類型 | 代表工具 | 工作層級 | 案例應用 | 特點 |
---|---|---|---|---|
四層調度器 | LVS | 傳輸層 | 入口流量分發 | 高性能,支持百萬并發 |
七層調度器 | Nginx | 應用層 | HTTP/HTTPS 請求處理 | 支持 URL 重寫、SSL 卸載 |
云原生調度 | Kubernetes Ingress | 應用層 | 容器化環境 | 自動擴縮容,服務發現 |
三、實驗案例(HAproxy 搭建Web群集)
環境:Web:102 103 ? 代理服務器:101
部署 :
#web部署
102 103:
dnf -y install httpd
systemctl stop firewalld
systemctl distable firewalld
setenforce 0101:
echo "test2">/var/www/html/index.html
102:
echo "test3">/var/www/html/index.htmlsystemctl restart httpd
systemctl enable httpd
#HA代理部署
-測試網站 curl 192.168.10.102/103
-安裝haproxy
dnf -y install haproxy#日志文件 /var/log/messages-配置文件
vim /etc/haproxy/haproxy.cfg
====================================
globallog 127.0.0.1 local2chroot /var/lib/haproxy //禁錮目錄pidfile /var/run/haproxy.pid //pid文件,運行時生成user haproxy //用戶group haproxy //用戶組daemon //守護進程maxconn 4000 //最大連接數defaults //默認模式,決定haproxy工作在哪一層mode httplog global //日志記錄為全局模式option httplog //開啟 HTTP 格式的日志記錄option dontlognull //不記錄空值相關的日志retries 3 //默認重試次數timeout http-request 5s // HTTP 請求超時時間timeout queue 1m //等待時間timeout connect 5s //規定連接建立的超時時間timeout client 1m //客戶端連接的超時時間timeout server 1m //服務器端連接的超時時間timeout http-keep-alive 5s //持久連接超時時間timeout check 5s //檢查的超時時間maxconn 3000 //最大并發連接數#刪除defaults下面內容
配置新內容------
listen myweb bind 0.0.0.0:80 //監聽所有網卡的80端口(haproxy 的端口取決于監聽的服務端口是多少它就是多少)option httpchk GET /index.html //通過發送請求到服務器來進行健康檢查balance roundrobin //負載均衡算法 為 輪詢算法server inst1 192.168.10.102:80 check inter 2000 fall 3 //用于服務器相關配置或監測server inst2 192.168.10.103:80 check inter 2000 fall 3 #啟動服務
systemctl start haproxy
#HA proxy 日志(默認在系統syslog日志中,不方便,單獨定義出來)
配置文件
vim /etc/haproxy/haproxy.cfg
globallog 127.0.0.1 local2log 127.0.0.1 local3配置Rsyslog服務
vim /etc/rsyslog.d/haproxy.conf //添加一個日志服務的配置文件
$ModLoad imudp
$UDPServerRun 514
local3.*/var/log/haproxy.log
&~ //標注參數的結束重啟
systemctl restart haproxy
systemctl restart rsyslog測試日志信息
cat /var/log/haproxy.log
tail -f /var/log/haproxy.log (自動生成,重新訪問網站會生成)會顯示日志信息