HAProxy 簡介
HAProxy 是一款高性能的負載均衡器和代理服務器,支持 TCP 和 HTTP 應用。廣泛用于高可用性集群,能夠有效分發流量到多個后端服務器,確保服務的穩定性和可擴展性。
HAProxy 核心功能
- 負載均衡:支持輪詢(round-robin)、最少連接(leastconn)、源 IP 哈希(source)等多種調度算法。
- 健康檢查:自動檢測后端服務器狀態,剔除故障節點。
- SSL/TLS 終止:支持 HTTPS 流量解密和加密。
- 高可用性:可結合 Keepalived 實現 VIP 漂移,避免單點故障。
HAProxy 安裝與配置
在 Ubuntu/Debian 系統安裝 HAProxy:
sudo apt update
sudo apt install haproxy
配置文件位于 /etc/haproxy/haproxy.cfg
,典型配置示例:
globallog /dev/log local0maxconn 4000user haproxygroup haproxydaemondefaultsmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http-inbind *:80default_backend serversbackend serversbalance roundrobinserver server1 192.168.1.10:80 checkserver server2 192.168.1.11:80 check
健康檢查配置
通過 check
參數啟用健康檢查,支持主動(HTTP 請求)和被動(TCP 連接)模式:
backend web_serversoption httpchk GET /healthserver web1 192.168.1.10:80 check inter 5s rise 2 fall 3
日志與監控
啟用日志需在 global
部分配置 log
指令,并配置系統日志服務(如 rsyslog):
globallog 127.0.0.1 local0 info
HAProxy 高可用方案
結合 Keepalived 實現 VIP 漂移:
- 安裝 Keepalived:
sudo apt install keepalived
- 配置 Keepalived(
/etc/keepalived/keepalived.conf
):
vrrp_script chk_haproxy {script "pidof haproxy"interval 2
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100/24}track_script {chk_haproxy}
}
HAProxy 基本配置結構
HAProxy 的配置文件通常分為幾個主要部分:全局設置(global)、默認設置(defaults)、前端(frontend)和后端(backend)。以下是基本配置的組成部分:
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level adminstats timeout 30suser haproxygroup haproxydaemonmaxconn 4000defaultslog globalmode httpoption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000errorfile 400 /etc/haproxy/errors/400.httperrorfile 403 /etc/haproxy/errors/403.httperrorfile 408 /etc/haproxy/errors/408.httperrorfile 500 /etc/haproxy/errors/500.httperrorfile 502 /etc/haproxy/errors/502.httperrorfile 503 /etc/haproxy/errors/503.httperrorfile 504 /etc/haproxy/errors/504.httpfrontend http-inbind *:80default_backend serversbackend serversbalance roundrobinserver server1 192.168.1.10:80 checkserver server2 192.168.1.11:80 check
全局配置(global)
全局配置部分定義了 HAProxy 進程的全局參數,通常包括日志、用戶權限和性能調優等。
log
:定義日志輸出位置和級別。chroot
:將 HAProxy 進程限制在指定目錄,增強安全性。stats socket
:啟用統計信息套接字,用于管理。user
和group
:指定運行 HAProxy 的用戶和組。daemon
:以守護進程模式運行。maxconn
:設置最大連接數。
默認配置(defaults)
默認配置部分定義了適用于所有 frontend 和 backend 的默認參數。
mode
:設置代理模式(http、tcp)。option httplog
:啟用 HTTP 日志記錄。timeout
:定義連接、客戶端和服務器的超時時間。errorfile
:指定錯誤響應文件路徑。
前端配置(frontend)
前端配置定義了 HAProxy 如何接收客戶端請求。
bind
:指定監聽的 IP 和端口。default_backend
:設置默認的后端服務器組。- 其他常用選項:
acl
:定義訪問控制規則。use_backend
:根據條件選擇后端服務器組。
后端配置(backend)
后端配置定義了請求如何轉發到后端服務器。
balance
:設置負載均衡算法(如roundrobin
、leastconn
)。server
:定義后端服務器地址和端口,check
表示啟用健康檢查。- 其他常用選項:
cookie
:啟用會話持久性。http-check
:自定義健康檢查方式。
負載均衡算法
HAProxy 支持多種負載均衡算法,常見的有:
roundrobin
:輪詢(默認)。leastconn
:最少連接數優先。source
:基于源 IP 哈希。uri
:基于 URI 哈希。
健康檢查
HAProxy 支持主動健康檢查,確保后端服務器的可用性:
backend serversoption httpchk GET /healthserver server1 192.168.1.10:80 check inter 2000 rise 2 fall 3
httpchk
:指定健康檢查的 HTTP 請求路徑。inter
:檢查間隔(毫秒)。rise
:成功次數標記服務器為健康。fall
:失敗次數標記服務器為不健康。
統計頁面
啟用統計頁面以監控 HAProxy 狀態:
listen statsbind *:8404stats enablestats uri /statsstats refresh 10sstats admin if TRUE
bind
:指定統計頁面的監聽端口。stats uri
:設置訪問路徑。stats admin
:允許通過頁面管理服務器狀態。