13.3.1 全局区(global)关键参数与运行模式

全局区(global)用于定义 HAProxy 进程级别的运行参数,决定日志、权限、资源限制与运行模式。它位于配置文件顶部,对后续 defaults、frontend、backend、listen 均生效,是稳定运行与高性能的基础。

原理草图:global 参数如何影响运行

文章图片

1. 运行模式与进程控制(示例 + 解释)
- daemon:以守护进程方式运行,生产环境常用
- nbthread:线程数量
- cpu-map:绑定线程到 CPU 核心
- master-worker:主从模式,便于平滑重启与状态管理

global
    daemon
    master-worker
    nbthread 4
    cpu-map auto:1/1-4 0-3

解释nbthread 4 启动 4 个线程;cpu-map 将线程绑定到 0-3 号 CPU 核心,降低上下文切换。

2. 日志与调试(示例 + 解释)
- log:指定 syslog 输出地址与级别
- quiet / debug:控制日志详细程度

global
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 notice

解释:日志发送到本机 syslog;local0/info 用于访问日志,local1/notice 用于状态告警。

3. 权限与安全(示例 + 解释)
- user / group:最小权限运行
- chroot:隔离运行目录
- stats socket:管理套接字,用于运行时管理

global
    user haproxy
    group haproxy
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin

解释stats socket 允许使用 socat 进行在线管理(如软下线后端)。

4. 连接与资源限制(示例 + 解释)
- maxconn:全局最大并发连接
- ulimit-n:进程最大文件句柄数
- tune.ssl.default-dh-param:DH 参数长度

global
    maxconn 50000
    ulimit-n 100000
    tune.ssl.default-dh-param 2048

解释maxconn 需与系统 ulimit -n 匹配,否则会出现连接被拒绝。

5. 性能相关调优参数(示例 + 解释)
- tune.bufsize:单连接缓冲区大小
- tune.maxaccept:单次可接受连接数
- tune.ssl.cachesize:SSL 会话缓存

global
    tune.bufsize 32768
    tune.maxaccept 1000
    tune.ssl.cachesize 20000

解释:大报文建议增大 tune.bufsize,高并发场景可提高 tune.maxaccept

6. 完整 global 示例(可直接放入 /etc/haproxy/haproxy.cfg)

global
    log 127.0.0.1 local0 info
    chroot /var/lib/haproxy
    user haproxy
    group haproxy
    daemon
    master-worker
    maxconn 50000
    ulimit-n 100000
    stats socket /run/haproxy/admin.sock mode 660 level admin
    nbthread 4
    cpu-map auto:1/1-4 0-3
    tune.ssl.default-dh-param 2048

7. 安装与启动(含命令解释)

# CentOS/RHEL
yum install -y haproxy

# Ubuntu/Debian
apt-get update && apt-get install -y haproxy

# 检查版本
haproxy -v
# 校验配置语法(推荐每次改完配置执行)
haproxy -c -f /etc/haproxy/haproxy.cfg

# 启动与查看状态
systemctl enable --now haproxy
systemctl status haproxy

解释-c 仅检查配置语法,不启动;-f 指定配置文件路径。

8. 运维排错(常见问题 + 命令)

# 1) 配置语法错误
haproxy -c -f /etc/haproxy/haproxy.cfg

# 2) 连接数不足/被拒绝
ulimit -n
cat /proc/$(pidof haproxy)/limits | grep "Max open files"

# 3) 套接字管理失败
ls -l /run/haproxy/admin.sock

排错说明
- 若 maxconn 生效异常,多为 ulimit -n 不足或 systemd LimitNOFILE 未设置。
- 若 stats socket 无法访问,检查权限与 SELinux。

9. 动态管理示例(stats socket)

# 查看后端状态
echo "show stat" | socat /run/haproxy/admin.sock stdio | head

# 软下线某个后端
echo "disable server bk_web/web1" | socat /run/haproxy/admin.sock stdio

解释disable server 不会立即断开已有连接,适合平滑维护。

10. 练习
1. 配置 maxconn 20000ulimit-n 40000,验证并发上限是否变化。
2. 添加 stats socket 并通过 socat 查看状态。
3. 将 nbthread 改为 8,使用 ps -Lf 观察线程数变化。