全网最全!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 root@192.168.x.x:/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 问题诊断流程图
六、性能调优与监控
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 }
结语:为什么这篇指南值得收藏?
- 全离线覆盖:从依赖下载到安全策略,无遗漏环节
- 企业级规范:融入金融级安全加固与性能调优经验
立即实践,构建属于你的企业级高可用架构! 🚀
更多推荐
所有评论(0)