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

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

相关推荐
ICT董老师28 分钟前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
原神启动128 分钟前
K8S(八)—— Kubernetes Pod 资源限制 + 探针(Probe)解析
云原生·容器·kubernetes
zxnbmk36 分钟前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
叫致寒吧37 分钟前
pod详解
云原生·kubernetes
水上冰石1 小时前
查看k8s下Jenkins的插件在宿主机的路径
容器·kubernetes·jenkins
孤岛悬城1 小时前
58 k8s之pod
云原生·容器·kubernetes
可爱又迷人的反派角色“yang”1 小时前
k8s(五)
linux·运维·docker·云原生·容器·kubernetes
oMcLin1 小时前
如何在Ubuntu 22.10上通过配置K3s轻量级Kubernetes集群,提升边缘计算环境的资源管理能力?
ubuntu·kubernetes·边缘计算
CodeCaptain2 小时前
配置Nginx反向代理来实现负载均衡,续阿里云ECS配置Nginx反向代理
nginx·阿里云·负载均衡
optimistic_chen2 小时前
【Docker入门】容器技术
linux·运维·服务器·docker·容器