需求:
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部署,解决以下痛点:
联网机执行:
# 创建临时目录(避免污染系统环境)
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
,可自动解析深层依赖树# 压缩成单一文件(便于完整性校验)
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
增量同步,减少传输失败风险# 解压并创建仓库元数据
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
确保优先使用本地源,避免意外调用旧包# 清除缓存并安装
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
# /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
强制设置监控面板密码(默认开放危险!)# 添加自定义端口类型
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
安全哲学:
audit2allow
将监控到的拒绝事件转为白名单策略# 启动并设置开机自启
systemctl enable --now haproxy
# 热重载配置(零中断)
systemctl reload haproxy
# 监控实时状态
echo "show info;show stat" | socat stdio /var/lib/haproxy/stats
# 端口监听验证
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
故障现象 | 排查命令 | 解决方案 |
---|---|---|
端口绑定失败 | ss -tulnp \| grep <端口> |
关闭冲突进程或修改端口 |
监控页面无法访问 | curl -v http://localhost:8100/stats |
检查SELinux/防火墙策略 |
后端服务状态为DOWN | telnet <后端IP> <端口> |
排查网络或健康检查配置 |
# /etc/sysctl.conf
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 30000
# 应用配置
sysctl -p
# 启用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 }
立即实践,构建属于你的企业级高可用架构!