Согласно различным блогам, HAproxy можно корректно перезапустить с помощью следующей команды:
sudo haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $ (cat /var/run/haproxy.pid)
Чтобы проверить это, я создал сценарий apache bench, который непрерывно отправлял сообщение на haproxy. В идеале всякий раз, когда я перезапускаю свой сервер, сценарий не должен влиять на выполнение группы apache. Но кажется, что всякий раз, когда Haproxy перезапускается, сценарии apache bench завершаются, и соединение с балансировщиком нагрузки теряется.
Вот подробности моего файла конфигурации HaProxy:
global
nbproc 4
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
user haproxy
group haproxy
daemon
pidfile /var/run/haproxy.pid
stats socket /home/ubuntu/haproxy.sock
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen webstats
bind 0.0.0.0:1000
stats enable
mode http
stats uri /lb?stats
stats auth anand:aaaaaaaa
#stats refresh
listen web-farm 0.0.0.0:80
mode http
balance roundrobin
option httpchk HEAD /index.php HTTP/1.0
server server2.com 1.1.1.1:80
server serve1.com 1.1.1.2:80
~
Пожалуйста, дайте мне знать, что мне здесь не хватает.
При устранении неполадок попробуйте использовать «nbproc 1» вместо «nbproc 4», увеличение количества процессов требуется редко и в некоторых случаях может потенциально привести к проблемам.
Однако, скорее всего, не в этом главная проблема. Описанный вами сценарий должен действительно работать так, как вы ожидаете.
Горячая реконфигурация HAProxy на самом деле работает так:
Если что-то пойдет не так после 2, старый процесс вместо этого получит сигнал SIGTTIN и продолжит работу, как прежде.
Некоторые дополнительные сведения в вашем вопросе могут упростить устранение этой проблемы: