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 20000 与 ulimit-n 40000,验证并发上限是否变化。
2. 添加 stats socket 并通过 socat 查看状态。
3. 将 nbthread 改为 8,使用 ps -Lf 观察线程数变化。