企业级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 源码编译安装
bash
# 在有网环境下载源码包
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服务脚本
bash
vi /etc/rc.d/init.d/haproxy
#!/bin/bash
# chkconfig: 2345 10 90
# description: HAProxy Service
BASE_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() {
stop
sleep 2
start
}
case "$1" in
start) start ;;
stop) stop ;;
restart) restart ;;
*) echo "Usage: $0 {start|stop|restart}" ;;
esac
3.2 配置服务自启动
bash
chmod +x /etc/rc.d/init.d/haproxy
chkconfig --add haproxy
chkconfig haproxy on
四、K8S APIServer负载配置
4.1 主配置文件haproxy.cfg
bash
cat > /usr/local/haproxy/haproxy.cfg <<EOF
global
maxconn 4000 # 最大连接数
log /dev/log local0 # 日志输出
stats timeout 30s # 统计接口超时
defaults
mode tcp # 四层代理模式
timeout connect 5s # 后端连接超时
timeout client 30s # 客户端超时
timeout server 30s # 服务端超时
frontend k8s-apiserver
bind *:16443 # 监听所有IP的16443端口
default_backend apiserver-nodes
backend apiserver-nodes
balance roundrobin # 轮询负载策略
option tcp-check # TCP健康检查
default-server inter 10s fall 2 rise 2
server master119 192.167.14.119:6443 check
server master223 192.167.14.223:6443 check
server master226 192.167.14.226:6443 check
listen stats # 监控页面配置
bind *:33305
mode http
stats enable
stats uri /monitor
stats auth admin:HAProxy@2023
EOF
4.2 配置解析
配置项 | 说明 |
---|---|
balance roundrobin |
轮询策略,均匀分配请求 |
inter 10s |
健康检查间隔 |
fall 2 |
连续失败2次标记节点不可用 |
stats uri |
监控页面路径,用于实时查看状态 |
五、服务管理与验证
5.1 服务控制命令
bash
# 启动服务
systemctl start haproxy
# 查看状态
systemctl status haproxy
# 检查端口监听
ss -lntp | grep 16443
# 强制终止进程
killall -9 haproxy
5.2 监控页面访问
- 访问地址 :
http://<节点IP>:33305/monitor
- 认证信息:admin / HAProxy@2023
六、生产级优化方案
6.1 内核参数调优
bash
# 增加文件描述符限制
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 65535" >> /etc/sysctl.conf
sysctl -p
6.2 日志切割配置
bash
# 安装logrotate
cat > /etc/logrotate.d/haproxy <<EOF
/usr/local/haproxy/logs/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 $(cat /usr/local/haproxy/logs/haproxy.pid 2>/dev/null) 2>/dev/null || true
endscript
}
EOF
七、高可用联动Keepalived
7.1 VIP漂移验证
bash
# 查看当前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七层负载实战》
如果本教程帮助您解决了问题,请点赞❤️收藏⭐支持!欢迎在评论区留言交流技术细节!欲了解密码学知识,请订阅《密码学实战》专栏 → 密码学实战