如何在 CentOS 7 上使用 systemd 管理 HAProxy 服务启动?

文章导读
在 CentOS 7.5(内核 3.10)上使用 HAProxy 1.8.13 时,常见haproxy.service holdoff time over, scheduling restart重启循环问题,需正确配置 systemd 服务文件并启用USE_SYSTEMD=1编译选项。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

在 CentOS 7.5(内核 3.10)上使用 HAProxy 1.8.13 时,常见haproxy.service holdoff time over, scheduling restart重启循环问题,需正确配置 systemd 服务文件并启用USE_SYSTEMD=1编译选项。

原因分析

根据 2018 年 8 月 15 日的实际案例,用户在 CentOS 7.5(64 位,内核 3.10)上部署 HAProxy 1.8.13 时,即使配置文件验证通过(haproxy -f /etc/haproxy/haproxy.conf -c返回Configuration file is valid),systemd 仍会持续重启服务。通过journalctl -u haproxy.service查看日志,发现典型错误:haproxy.service holdoff time over, scheduling restart。这通常是因为 HAProxy 编译时未启用 systemd 支持,或 service 文件配置不当导致进程无法正确守护。

解决方案

1. 编译安装时启用 systemd 支持

根据 2023 年 8 月 12 日的部署记录,编译 HAProxy 2.8.1 时必须添加USE_SYSTEMD=1参数:

make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/lua-5.4.4/src/ LUA_LIB=/usr/local/lua-5.4.4/src/

TARGET 参数需根据内核版本指定,CentOS 7.x 内核 3.10 应使用TARGET=linux2628TARGET=linux31(2022 年 7 月 13 日资料)。

2. 创建 systemd 服务文件

根据 2019 年 7 月 26 日的教程,在/usr/lib/systemd/system/下创建haproxy.service文件。注意:有用户反馈直接在/usr/lib/systemd/system/新建可能不生效,建议复制到/etc/systemd/system/目录。

3. 配置正确的启动参数

根据 2020 年 12 月 23 日的资料,以 daemon 模式启动需使用:

如何在 CentOS 7 上使用 systemd 管理 HAProxy 服务启动?
haproxy -D -f /etc/haproxy/haproxy.cfg [-p /var/run/haproxy.pid]

或使用 systemd 管理的 daemon 模式:

haproxy -Ds -f /etc/haproxy/haproxy.cfg [-p /var/run/haproxy.pid]

4. 验证服务状态

启动后使用以下命令验证(2024 年 11 月 5 日资料):

systemctl start haproxy
systemctl status haproxy
haproxy -v # 返回版本号即为安装成功

注意事项

1. **PID 文件路径**:确保/var/run/haproxy.pid目录存在且有写入权限,否则会导致启动失败(2018 年 8 月 15 日案例)。

2. **配置文件验证**:启动前务必执行haproxy -c -f /etc/haproxy/haproxy.cfg检查语法,但注意即使验证通过也可能因权限问题无法启动。

3. **端口权限**:如果 HAProxy 需要监听 1024 以下端口,必须以 root 用户启动(2024 年 9 月 12 日资料)。

4. **防火墙配置**:CentOS 7 需关闭 firewalld 或开放相应端口,执行systemctl stop firewalld.service(2026 年 4 月 11 日资料)。

如何在 CentOS 7 上使用 systemd 管理 HAProxy 服务启动?

5. **版本兼容性**:CentOS 7.7 环境下测试过 HAProxy 1.8.25,CentOS 7.9 可通过 yum 源直接安装(2026 年 1 月 31 日、2024 年 11 月 5 日资料)。

参考来源

来源:StackOverflow/技术论坛 - 如何用 systemd 在 HAProxy 上启动 CentOS(2018 年 8 月 15 日)

来源:CSDN/技术博客 - Centos7.x 下 haproxy 注册成服务的教程(2019 年 7 月 26 日)

来源:博客园 - 基于 CentOS 7 部署社区版 Haproxy(2023 年 8 月 12 日)

来源:知乎/技术文章 - CentOS7.9 部署 Haproxy 和 Keepalived(2024 年 11 月 5 日)