Добрый день.
Сталкиваюсь постоянно с проблемой, что старые процессы haproxy остаются висеть на 80-м сокете после reload.
Система - debian разных версий. Например, 8.5.
Haproxy - 1.5.8, 1.6.4 (сталкивался в совсем разных версиях).
systemd, да, куда без него.
Обычная ситуация:
# cat /run/haproxy.pid
17693
# ps auxf|grep haproxy
root 9813 0.0 0.1 12664 1552 pts/1 S+ 11:33 0:00 \_ grep haproxy
haproxy 28308 0.0 0.2 42428 2944 ? Ss Aug30 1:13 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 23644
haproxy 4840 0.0 0.2 42428 2928 ? Ss Aug30 1:11 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 28315
haproxy 5477 0.0 0.2 42432 2928 ? Ss Aug30 1:11 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 4847
haproxy 4320 0.0 0.2 42428 2932 ? Ss Sep02 0:43 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 5483
haproxy 12241 0.0 0.2 42428 3064 ? Ss Sep02 0:42 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 4329
haproxy 20062 0.0 0.2 42428 2944 ? Ss Sep02 0:42 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 12249
haproxy 18867 0.0 0.2 42428 2856 ? Ss Sep02 0:37 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 20070
haproxy 32211 0.0 0.2 42428 3068 ? Ss Sep03 0:29 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 18876
haproxy 427 0.0 0.2 42428 2988 ? Ss Sep03 0:29 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 32217
haproxy 1779 0.0 0.2 42428 2932 ? Ss Sep03 0:29 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 436
haproxy 11346 0.0 0.2 42428 2928 ? Ss Sep03 0:26 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 1788
haproxy 6691 0.0 0.2 42432 2992 ? Ss Sep03 0:21 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 11354
haproxy 1876 0.0 0.2 42428 2944 ? Ss Sep04 0:10 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 6700
haproxy 17684 0.0 0.2 42428 2920 ? Ss 04:30 0:04 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -st 1883
root 17689 0.0 0.0 4084 628 ? Ss 04:30 0:00 /usr/sbin/haproxy-systemd-wrapper -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
haproxy 17692 0.0 0.6 42428 6256 ? S 04:30 0:00 \_ /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
haproxy 17693 0.0 0.2 42428 2928 ? Ss 04:30 0:04 \_ /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -Ds
При этом, каждый из них слушает на сокете 80 и отвечает:
# netstat -nlp|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17693/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17684/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1876/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6691/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11346/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1779/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 427/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 32211/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 18867/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 20062/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12241/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4320/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5477/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4840/haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 28308/haproxy
unix 2 [ ACC ] STREAM LISTENING 136804890 20062/haproxy /run/haproxy/admin.sock.20061.tmp
unix 2 [ ACC ] STREAM LISTENING 138008774 6691/haproxy /run/haproxy/admin.sock.6690.tmp
То что отвечают разные процессы, видно тут:
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 4840</h2>
<p><b>pid = </b> 4840 (process #1, nbproc = 1)<br>
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 4320</h2>
<p><b>pid = </b> 4320 (process #1, nbproc = 1)<br>
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 18867</h2>
<p><b>pid = </b> 18867 (process #1, nbproc = 1)<br>
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 18867</h2>
<p><b>pid = </b> 18867 (process #1, nbproc = 1)<br>
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 427</h2>
<p><b>pid = </b> 427 (process #1, nbproc = 1)<br>
# curl -s http://haproxy:**********@localhost/haproxy?stats|grep pid
<h2>Statistics Report for pid 18867</h2>
<p><b>pid = </b> 18867 (process #1, nbproc = 1)<br>
Пробовал править инит-скрипт, менял флаг -sf на -st - эффекта не дало.
Так-то haproxy работает, все инстансы отвечают нормально, без проблем, но конфиг используют каждый свой, старый :)
По netstat -np|grep <pid> по процессам ничего нету, т.е. не осталось какого-то висящего коннекта, из-за которого старый инстанс haproxy не хочет завершаться.
Кто-нибудь сталкивался с таким?