企業級HAProxy高可用離線部署實戰(附Kubernetes APIServer負載均衡配置)
摘要:本文深入講解在離線環境下部署HAProxy 3.1.1的全流程,涵蓋源碼編譯、系統服務封裝、K8S APIServer四層負載配置等核心環節,并提供生產級高可用方案。適用于金融、政務等隔離網絡的負載均衡場景。
一、環境規劃與架構設計
1.1 節點信息
節點IP | 角色 | 服務組件 |
---|---|---|
192.167.14.119 | 主負載節點 | HAProxy + Keepalived |
192.167.14.223 | 備負載節點 | HAProxy + Keepalived |
192.167.14.226 | 備負載節點 | HAProxy + Keepalived |
1.2 服務端口規劃
服務 | 端口 | 協議 | 用途 |
---|---|---|---|
HAProxy Admin | 33305 | HTTP | 監控接口 |
K8S APIServer | 16443 | TCP | Kubernetes API入口 |
二、離線安裝HAProxy
2.1 源碼編譯安裝
# 在有網環境下載源碼包
wget https://www.haproxy.org/download/3.1/src/haproxy-3.1.1.tar.gz# 傳輸到離線環境后解壓編譯
tar -zxvf haproxy-3.1.1.tar.gz -C /usr/local
cd /usr/local/haproxy-3.1.1# 指定目標系統和安裝路徑
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy# 創建日志目錄
mkdir -p /usr/local/haproxy/logs
關鍵參數解析:
TARGET=linux31
:指定內核版本兼容性PREFIX
:定義安裝根目錄,便于集中管理
三、系統服務封裝
3.1 創建SystemV服務腳本
vi /etc/rc.d/init.d/haproxy#!/bin/bash
# chkconfig: 2345 10 90
# description: HAProxy ServiceBASE_DIR="/usr/local/haproxy"
CONFIG_FILE="$BASE_DIR/haproxy.cfg"
PID_FILE="$BASE_DIR/logs/haproxy.pid"start() {echo "Starting HAProxy..."$BASE_DIR/sbin/haproxy -f $CONFIG_FILE -p $PID_FILE[ $? -eq 0 ] && echo "Success" || echo "Failed"
}stop() {echo "Stopping HAProxy..."[ -f $PID_FILE ] && kill -USR1 $(cat $PID_FILE) || pkill haproxy
}restart() {stopsleep 2start
}case "$1" instart) start ;;stop) stop ;;restart) restart ;;*) echo "Usage: $0 {start|stop|restart}" ;;
esac
3.2 配置服務自啟動
chmod +x /etc/rc.d/init.d/haproxy
chkconfig --add haproxy
chkconfig haproxy on
四、K8S APIServer負載配置
4.1 主配置文件haproxy.cfg
cat > /usr/local/haproxy/haproxy.cfg <<EOF
globalmaxconn 4000 # 最大連接數log /dev/log local0 # 日志輸出stats timeout 30s # 統計接口超時defaultsmode tcp # 四層代理模式timeout connect 5s # 后端連接超時timeout client 30s # 客戶端超時timeout server 30s # 服務端超時frontend k8s-apiserverbind *:16443 # 監聽所有IP的16443端口default_backend apiserver-nodesbackend apiserver-nodesbalance roundrobin # 輪詢負載策略option tcp-check # TCP健康檢查default-server inter 10s fall 2 rise 2server master119 192.167.14.119:6443 checkserver master223 192.167.14.223:6443 checkserver master226 192.167.14.226:6443 checklisten stats # 監控頁面配置bind *:33305mode httpstats enablestats uri /monitorstats auth admin:HAProxy@2023
EOF
4.2 配置解析
配置項 | 說明 |
---|---|
balance roundrobin | 輪詢策略,均勻分配請求 |
inter 10s | 健康檢查間隔 |
fall 2 | 連續失敗2次標記節點不可用 |
stats uri | 監控頁面路徑,用于實時查看狀態 |
五、服務管理與驗證
5.1 服務控制命令
# 啟動服務
systemctl start haproxy# 查看狀態
systemctl status haproxy# 檢查端口監聽
ss -lntp | grep 16443# 強制終止進程
killall -9 haproxy
5.2 監控頁面訪問
- 訪問地址:
http://<節點IP>:33305/monitor
- 認證信息:admin / HAProxy@2023
六、生產級優化方案
6.1 內核參數調優
# 增加文件描述符限制
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
sysctl -p
6.2 日志切割配置
# 安裝logrotate
cat > /etc/logrotate.d/haproxy <<EOF
/usr/local/haproxy/logs/*.log {dailyrotate 7missingoknotifemptycompressdelaycompresssharedscriptspostrotate/bin/kill -USR1 $(cat /usr/local/haproxy/logs/haproxy.pid 2>/dev/null) 2>/dev/null || trueendscript
}
EOF
七、高可用聯動Keepalived
7.1 VIP漂移驗證
# 查看當前VIP綁定
ip addr show | grep 192.167.14.205# 模擬主節點故障
systemctl stop haproxy
tail -f /var/log/messages # 觀察切換日志
八、故障排查指南
現象 | 排查命令 | 解決方案 |
---|---|---|
端口未監聽 | `netstat -lntp | grep haproxy` |
健康檢查失敗 | telnet <后端IP> 6443 | 驗證APIServer服務狀態 |
負載不均衡 | 監控頁面查看后端節點狀態 | 調整balance策略為leastconn |
內存占用過高 | top -p $(pgrep haproxy) | 優化maxconn參數,增加系統內存 |
擴展閱讀:《HAProxy七層負載實戰》
如果本教程幫助您解決了問題,請點贊??收藏?支持!歡迎在評論區留言交流技術細節!欲了解密碼學知識,請訂閱《密碼學實戰》專欄 → 密碼學實戰