13.2.2 操作系统与依赖环境要求

在选择HAProxy版本后,需要先确认目标操作系统与依赖环境是否满足运行与后续扩展需求,避免因内核特性、库版本或权限策略导致的性能与稳定性问题。

支持的操作系统与内核要求#

  • 主流发行版:RHEL/CentOS 7/8/9、Rocky/AlmaLinux、Ubuntu 18.04/20.04/22.04、Debian 10/11/12
  • 建议内核:4.x 及以上,生产环境优先选择长期支持内核
  • 时间同步:启用 chronyd 或 ntpd,保证日志与监控一致性
  • 文件系统:推荐 ext4/xfs,避免低配环境下日志与会话表频繁写入导致的性能抖动

示例:检查内核与发行版

# 查看发行版与内核
cat /etc/os-release
uname -r

# 预期效果:输出发行版名称与内核版本,如 5.14.x

系统资源基线建议#

  • CPU:至少 2 核;高并发场景建议 4 核及以上
  • 内存:至少 2GB;启用缓存/连接池时建议 4GB 及以上
  • 磁盘:系统盘 20GB 以上,日志盘按访问量预估(建议独立日志分区)
  • 网络:千兆及以上网卡,生产建议双网卡或绑定

示例:快速评估资源

# CPU/内存/磁盘概览
lscpu | grep -E 'Model name|CPU\(s\)'
free -h
df -hT

# 预期效果:确认CPU核数、内存容量、磁盘类型与余量

依赖库与工具#

  • OpenSSL:启用 TLS/SSL 功能所需,建议 1.1.x 或 3.x 版本
  • PCRE/PCRE2:用于 ACL 与正则匹配
  • zlib:用于压缩与部分模块依赖
  • systemd:用于服务托管与自动拉起
  • libc 与基础构建工具:源码编译需 gcc、make、binutils、readline 等

示例:依赖检查与安装(以 Ubuntu 为例)

# 检查关键库版本
openssl version
ldconfig -p | grep -E 'pcre|zlib'

# 安装编译依赖
sudo apt update
sudo apt install -y build-essential libssl-dev libpcre2-dev zlib1g-dev \
  libsystemd-dev

# 预期效果:库可被 ldconfig 查询到,后续编译不会报缺失

安全与权限配置要点#

  • 建议使用专用用户运行:haproxy 用户/用户组
  • 最小权限原则:仅开放必要端口与文件访问
  • SELinux/AppArmor:需评估策略,必要时配置放行规则或设置为 permissive
  • 防火墙:开放健康检查与服务端口,限制管理端口访问范围

示例:创建运行用户并准备目录

# 创建用户与目录
sudo useradd -r -s /sbin/nologin haproxy
sudo mkdir -p /etc/haproxy /var/lib/haproxy /var/log/haproxy
sudo chown -R haproxy:haproxy /var/lib/haproxy /var/log/haproxy

# 预期效果:haproxy 用户存在且日志目录可写

网络与服务依赖#

  • 端口规划:80/443/自定义业务端口、统计端口(如 8404)
  • DNS 与解析:启用本地缓存或使用稳定解析服务
  • 后端服务连通性:提前校验到各后端节点的链路与路由

示例:后端连通性验证

# 假设后端为 10.0.0.11:8080 与 10.0.0.12:8080
nc -vz 10.0.0.11 8080
nc -vz 10.0.0.12 8080

# 预期效果:succeeded 表示 TCP 连接可达

运行环境检查清单#

  • 系统时间与时区一致
  • 依赖库版本满足 TLS/正则/压缩需求
  • 资源与磁盘配额满足峰值流量
  • 端口无冲突,iptables/nftables 放行
  • 后端地址可达,健康检查策略明确

示例:一键自检脚本(可直接执行)

#!/usr/bin/env bash
set -e

echo "== OS & Kernel =="
cat /etc/os-release | grep -E 'PRETTY_NAME|VERSION'
uname -r

echo "== Time Sync =="
timedatectl status | grep -E 'Time zone|NTP service|System clock synchronized'

echo "== CPU/MEM/DISK =="
lscpu | grep -E 'CPU\(s\)|Model name'
free -h
df -hT | grep -E '/$|/var'

echo "== Libraries =="
openssl version || echo "OpenSSL missing"
ldconfig -p | grep -E 'pcre|zlib' || echo "PCRE/Zlib missing"

echo "== Ports =="
ss -lntp | grep -E ':80|:443|:8404' || echo "No conflicts on 80/443/8404"

echo "== Backend Check =="
for host in 10.0.0.11:8080 10.0.0.12:8080; do
  nc -vz ${host%:*} ${host#*:} || echo "Backend $host unreachable"
done

echo "== Done =="

原理草图(运行环境与组件依赖)#

文章图片

安装前常见故障与排错#

  • 问题:编译时报错 pcre missing
    处理:安装 libpcre2-devpcre-devel
  • 问题:启动失败提示权限不足
    处理:检查 haproxy 用户与日志目录权限
  • 问题:端口占用
    处理:使用 ss -lntp 确认占用进程并调整端口

示例:排查端口冲突

# 查找占用 80 端口的进程
ss -lntp | grep ':80'
# 预期效果:输出占用进程 PID/名称,必要时修改 HAProxy 监听端口

练习#

  1. 在你的系统上执行自检脚本,记录 OpenSSL 与 PCRE 版本,并判断是否满足 TLS/ACL 需求。
  2. 模拟端口冲突:先启动一个临时 HTTP 服务,再检查冲突并解决。
# 启动临时服务占用 8080
python3 -m http.server 8080

# 检查端口占用并记录 PID
ss -lntp | grep ':8080'

# 停止临时服务(根据 PID)
kill -9 <PID>
  1. /var/log/haproxy 设置最小权限并验证 haproxy 用户可写:
sudo chown -R haproxy:haproxy /var/log/haproxy
sudo -u haproxy touch /var/log/haproxy/test.log