全网最全!CentOS 7 离线环境部署HAProxy负载均衡指南(附避坑大全)

全网最全!CentOS 7 离线环境部署HAProxy负载均衡指南(附避坑大全)

需求:

Centos  已有服务器192.168.x.x  

1.新建用户haproxy  密码haproxy 并赋予基本权限

2.下载安装haproxy

3.将服务192.168.x.9:8080(nodename:mes09) 和192.168.x.10:8080 (nodename:mes09)挂载到192.168.x.x 实现负载均衡:

4.启动验证

关闭防火墙

SELinux 策略大概率阻止服务运行,需要修复

验证是否成功挂载到192.168.x.x:18080,是否可以成功访问http://192.168.x.x:8100/stats
引言:为什么需要离线部署HAProxy?

在金融、政务等安全隔离网络环境中,服务器通常无法访问外网,但业务又需要高可用负载均衡能力。本文手把手教你 零外网依赖 完成HAProxy部署,解决以下痛点:

  • 离线环境无法使用yum源
  • 内网服务器安全策略限制
  • 企业级高可用架构的基础搭建

一、环境准备(含避坑预警)

1.1 离线包制作(关键步骤!)

联网机执行

# 创建临时目录(避免污染系统环境)
mkdir -p /tmp/offline_packages && cd $_

# 使用repotrack递归下载(比yumdownloader更彻底!)(可自己用虚拟机下载或者从网站获取资源)
yum install -y yum-utils
repotrack \
  haproxy \
  policycoreutils-python \
  createrepo \
  libxml2-python \
  libselinux-python \
  audit-libs-python

# 验证架构一致性(必须全部x86_64)
file *.rpm | grep -v "x86_64" && echo "发现架构冲突!"

避坑指南

  • 若出现i686包,需用yum-config-manager --disable i686禁用32位源
  • 使用repotrack而非yumdownloader,可自动解析深层依赖树

1.2 离线包传输与校验
# 压缩成单一文件(便于完整性校验)
tar czvf haproxy_offline_$(date +%Y%m%d).tar.gz *

# 生成MD5校验码(防传输损坏)
md5sum haproxy_offline_*.tar.gz > checksum.txt

# 传输到目标服务器
scp haproxy_offline_*.tar.gz [email protected]:/root/

生产经验

  • 大文件传输建议分卷压缩:split -b 100M haproxy_offline.tar.gz part_
  • 敏感环境可用rsync -avzP增量同步,减少传输失败风险

二、离线环境部署(全流程详解)

2.1 构建本地YUM仓库
# 解压并创建仓库元数据
mkdir -p /root/offline_repo
tar zxvf haproxy_offline_*.tar.gz -C /root/offline_repo
cd /root/offline_repo

# 安装createrepo(需先解决依赖)
rpm -ivh deltarpm-*.rpm python-deltarpm-*.rpm 
rpm -ivh createrepo-*.rpm --nodeps --force

# 生成元数据(关键!)
createrepo . --database --workers=4

# 配置本地源
cat > /etc/yum.repos.d/local.repo << EOF
[local-haproxy]
name=HAProxy Offline Repository
baseurl=file:///root/offline_repo
enabled=1
gpgcheck=0
priority=1
EOF

技术深潜

  • createrepo --workers=4 启用多线程加速元数据生成
  • priority=1 确保优先使用本地源,避免意外调用旧包

2.2 HAProxy核心安装
# 清除缓存并安装
yum clean all && yum makecache fast
yum install -y haproxy policycoreutils-python

# 创建专用用户(安全加固!)
useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy

安全建议

  • -r 创建系统用户,/sbin/nologin 禁止登录
  • 数据目录归属:chown -R haproxy:haproxy /var/lib/haproxy

三、高可用配置(企业级最佳实践)

3.1 HAProxy核心配置模板
# /etc/haproxy/haproxy.cfg
global
    log         127.0.0.1 local0 info
    maxconn     30000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats level admin expose-fd listeners

defaults
    mode    http
    timeout connect 5s
    timeout client  30s
    timeout server  30s
    option  httplog
    option  dontlognull

# 监控面板(访问控制需加强!)
listen stats
    bind    0.0.0.0:8100
    stats   enable
    stats   hide-version
    stats   uri     /stats
    stats   refresh 5s
    stats   realm   "HAProxy Statistics"
    stats   auth    admin:SecurePassword123!

# 业务集群(动态权重示例)
backend app_servers
    balance     roundrobin
    server mes09 192.168.x.9:8080 check weight 1 inter 2s rise 2 fall 3
    server mes10 192.168.x.10:8080 check weight 2 inter 2s rise 2 fall 3

高级技巧

  • stats socket 启用运行时API,动态调整后端权重
  • ⚖️ weight 根据服务器性能分配流量权重
  • stats auth 强制设置监控面板密码(默认开放危险!)

3.2 SELinux策略优化(非禁用方案)
# 添加自定义端口类型
semanage port -a -t http_port_t -p tcp 8100
semanage port -a -t proxy_port_t -p tcp 18080

# 启用必要布尔值
setsebool -P haproxy_connect_any=1
setsebool -P httpd_can_network_connect=1

# 生成策略模块(永久生效)
grep haproxy /var/log/audit/audit.log | audit2allow -M haproxy_policy
semodule -i haproxy_policy.pp

安全哲学

  • 最小权限原则:精准开放所需权限,非粗暴禁用SELinux
  • audit2allow 将监控到的拒绝事件转为白名单策略

四、启动与深度验证

4.1 服务管理命令
# 启动并设置开机自启
systemctl enable --now haproxy

# 热重载配置(零中断)
systemctl reload haproxy

# 监控实时状态
echo "show info;show stat" | socat stdio /var/lib/haproxy/stats
4.2 全链路健康检查
# 端口监听验证
ss -tulnp | grep -E '8100|18080'

# 后端健康状态
curl -u admin:SecurePassword123! http://127.0.0.1:8100/stats | grep -A 5 app_servers

# 流量分发测试(观察轮询效果)
for i in {1..5}; do curl http://192.168.x.x:18080; done

五、故障排查大全(附思维导图)

5.1 常见问题速查表
故障现象 排查命令 解决方案
端口绑定失败 ss -tulnp \| grep <端口> 关闭冲突进程或修改端口
监控页面无法访问 curl -v http://localhost:8100/stats 检查SELinux/防火墙策略
后端服务状态为DOWN telnet <后端IP> <端口> 排查网络或健康检查配置
5.2 问题诊断流程图
端口占用
权限拒绝
配置错误
服务启动失败
查看日志
ss -tulnp
audit日志分析
生成SELinux策略
haproxy -c -f /path/to/config
修正语法错误

六、性能调优与监控

6.1 内核参数优化
# /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 30000

# 应用配置
sysctl -p
6.2 Prometheus监控集成
# 启用Prometheus exporter
listen stats
    bind 0.0.0.0:9101
    mode http
    stats enable
    stats uri /metrics
    stats http-request use-service prometheus-exporter if { path /metrics }

结语:为什么这篇指南值得收藏?

  1. 全离线覆盖:从依赖下载到安全策略,无遗漏环节
  2. 企业级规范:融入金融级安全加固与性能调优经验

立即实践,构建属于你的企业级高可用架构!

你可能感兴趣的:(运维与DevOps,负载均衡,后端架构,centos,负载均衡,linux,运维开发,运维,网络)