HAProxy 配置項雖多,生產環境常用核心段落有限。本文解析實戰配置範例,並深入比較 8 種負載均衡演算法適用場景。
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/haproxy
uid 99
gid 99
daemon
nbproc 1
pidfile /usr/local/haproxy/logs/haproxy.pid
debug
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance source
stats uri /haproxy-stats
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen 1paituan_proxy
bind 203.93.236.149:80
option httpchk HEAD /index.jsp HTTP/1.0
server web1 203.93.236.147:80 cookie app1inst1 check inter 2000 rise 2 fall 1
server web2 203.93.236.146:80 cookie app1inst2 check inter 2000 rise 2 fall 1
# /etc/syslog.conf
local3.* /var/log/haproxy.log
local0.* /var/log/haproxy.log
# /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -m 0"
service syslog restart
| 演算法 | 機制 | 適用場景 | 注意事項 |
|---|---|---|---|
| roundrobin | 輪詢,依權重分配 | 無狀態服務、後端效能均勻 | 最基礎,預設演算法 |
| static-rr | 靜態權重輪詢(啟動時計算,運行期不動態調整) | 後端效能固定、需精確權重控制 | 權重變更需重載 |
| leastconn | 最少連線優先 | 長連線、處理時間不均(如上傳、串流、WebSocket) | 需啟用 option httpchk 避免死連線干擾 |
| source | 客戶端 IP 雜湊 | 需會話親和性、無共享 Session 存儲 | NAT 環境下客戶端 IP 相同會導致分發不均 |
| uri | 請求 URI 雜湊 | 緩存代理場景,同一 URI 命中同一後端提高命中率 | 需配合 hash-type consistent 減少節點變動重分發 |
| url_param | 指定 URL 參數值雜湊(balance url_param userid) | 依用戶 ID/會話 ID 分發,精確會話親和 | 參數缺失時回退 roundrobin |
| hdr(name) | HTTP 標頭值雜湊(如 hdr(Authorization)) | API 閘道、OAuth Token 路由 | 標頭缺失時回退 roundrobin |
| rdp-cookie(name) | RDP Cookie(mstshash)雜湊 | RDP 閘道/負載均衡,確保同一用戶連同一後端 | 僅適用 RDP 協定 |
nbproc N(N = CPU 核心數),配合 cpu-map 綁核,突破單進程瓶頸。haproxy_exporter 抓取 /haproxy-stats;csv,Grafana 儀表板監控 qcur、qmax、scur、hrsp_5xx、ereq、eresp。淘寶早期大規模採用 HAProxy,穩定性經大規模驗證。殺掉進程需kill -9,說明進程韌性極強;生產環境建議配合 systemd 管理,啟用Restart=on-failure。