调查 CentOS 7 上的 HAProxy 故障 - 代码 = killed,状态 = 9 / KILL 以及重新加载 SYSV

调查 CentOS 7 上的 HAProxy 故障 - 代码 = killed,状态 = 9 / KILL 以及重新加载 SYSV

我在 CentOS 7 上使用 PCS 运行 2 个 HAProxy 1.6.9 实例。

周末,我主节点上的 HAProxy 突然出现故障。haproxy 的 systemctl status 显示故障状态。重新启动 haproxy 一切正常,服务又恢复了。

我现在正努力了解问题出在哪里并确保不再发生这种事。

这是 journalctl 的结果:

[root@main-lb ~]# journalctl --utc -u haproxy --since yesterday
-- Logs begin at Thu 2017-07-06 05:39:42 GMT, end at Sun 2017-08-20 17:36:05 GMT. --
Aug 20 07:20:01 main-lb systemd[1]: Reloaded SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments..
Aug 20 07:20:01 main-lb systemd[1]: haproxy.service: main process exited, code=killed, status=9/KILL
Aug 20 07:20:01 main-lb haproxy[14935]: Shutting down haproxy: [FAILED]
Aug 20 07:20:01 main-lb systemd[1]: Unit haproxy.service entered failed state.
Aug 20 07:20:01 main-lb systemd[1]: haproxy.service failed.

我可以看到Reloaded SYSV并且我想知道为什么它会被触发,并且我猜测这是这里问题的一部分。

答案1

在问题发生时我收集了更多日志并发现以下内容:

Aug 20 07:20:01 main-lb anacron[14184]: Job `cron.daily' started
Aug 20 07:20:01 main-lb run-parts(/etc/cron.daily)[14912]: starting logrotate

因此,logrotate 在 haproxy 失败之前就启动了。查看 haproxy.log ( /etc/logrotate.d/haproxy) 的 logrotate 脚本,我发现了以下内容:

/etc/init.d/haproxy reload > /dev/null

因此,haproxy 在日志轮换后重新加载。但是,似乎存在一个已知问题,如以下主题所述: https://discourse.haproxy.org/t/v1-6-10-soft-reload-not-working-under-centos-7-2/994

我所做的是从 logrotate 中删除 reload 命令并重新启动 rsyslog。

相关内容