企业级HAProxy高可用离线部署实战(附Kubernetes APIServer负载均衡配置)

企业级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七层负载实战》

如果本教程帮助您解决了问题,请点赞❤️收藏⭐支持!欢迎在评论区留言交流技术细节!欲了解密码学知识,请订阅《密码学实战》专栏 → 密码学实战

相关推荐
众人皆醒我独醉13 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情15 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
姚不倒17 小时前
F5 SSL Profile 证书卸载深入篇
运维·网络协议·负载均衡·ssl·f5
潮起鲸落入海20 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
梦想的颜色21 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
摇滚侠21 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
渣渣盟21 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
oscar99921 小时前
3.4 Nginx 负载均衡——动态再平衡的反人性纪律
nginx·github·负载均衡·财富源代码
姚不倒1 天前
F5 健康检查 Monitor 深入篇
运维·负载均衡·f5
咕噜咕噜的猪大侠1 天前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes