Назад | Перейти на главную страницу

Apache2 / fastcgi / php fastcgi / haproxy - проблемы с плавным перезапуском при изменении настроек конфигурации

У меня есть Apache2 с настройкой php fastcgi; Я хочу вносить изменения в конфигурацию, чтобы клиент этого не заметил (чтобы не было сброшенных / неудачных запросов), поэтому я помещаю перед ним haproxy; поэтому у меня есть 2 сервера Apache2, работающих на разных IP-адресах на одном сервере, и перед ними работает балансировка нагрузки / аварийное переключение Haproxy.

У Apache и Haproxy Keepalive отключен. Когда я бегу /etc/init.d/apache2_1 restart или apache2ctl -k graceful -f /etc/apache2_1/apache2.conf во время пробежки

watch -n 1 lynx -dump -source http://server/test.php (у которого есть echo rand(1,100000); в этом)

он по-прежнему отбрасывает 1 запрос с Bad Gateway. Как я могу предотвратить это?

В принципе, если бы я мог сказать Haproxy завершить все подключения (завершение означает просто дать им возможность работать) с server1, но отправить все новые на server2 в определенный момент времени, это сработало бы.

Также обратите внимание: мне нужен php-cgi: with mod_php все проще.

Редактировать: Я пробовал это: http://www.iterasi.net/openviewer.aspx?sqrlitid=afatecr91eadnhiil9agpg
однако текущие запросы не передаются в резервную копию, поэтому некоторые клиенты все еще получают Bad Gateway.

Чтобы ответить на комментарий Бена:

Кажется, что cgi изящный запускает все текущие соединения: mod_php изящно работает нормально: без простоев. Haproxy видит, когда apache падает (становится желтым на экране статистики), но fastcgi просто обрезает скрипты в воздухе.

[Sat Aug 15 19:00:55 2009] [notice] mod_fcgid: process /var/www/gui/wsapi.php(13987) exit(communication error), terminated by calling exit(), return code: 0
[Sat Aug 15 19:00:55 2009] [notice] mod_fcgid: process 14012 going graceful shutdown, sending SIGTERM
[Sat Aug 15 19:00:56 2009] [notice] mod_fcgid: process /var/www/gui/index.php(13999) exit(communication error), terminated by calling exit(), return code: 0

Также многие клиенты получают:

[Sat Aug 15 19:05:42 2009] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: index.php

Еще один признак того, что в отключении нет ничего изящного.

Вы можете указать haproxy прекратить отправку подключений к серверу. Для этого вы должны указать «http-check disable-on-404» в конфигурации haproxy, и ваш веб-сервер должен возвращать 404 (и ничего больше) для проверки работоспособности haproxy. Если haproxy увидит это, он пометит сервер как «NOLB», что означает, что он исключен из балансировки нагрузки, но по-прежнему завершает свои соединения и принимает постоянные соединения, запрашивающие его. Таким образом, все новые клиенты переходят на другие серверы.

Самый простой способ сделать это - проверить наличие «живого» файла, который после удаления приведет к возврату 404 (отсюда и выбор этого кода возврата). Конечно, лучше разработать более полное серверное приложение для ответа на проверки работоспособности!