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

Можно ли поддерживать очередь при перезапуске HAProxy

Я использую HAProxy для балансировки нагрузки на серверы приложений. Каждый сервер приложений имеет ограничение на максимальное количество подключений, при превышении которого очередь будет превышена. Когда это произойдет, я добавлю еще один сервер приложений в HAProxy и буду использовать «плавную перезагрузку» для удержания входящих запросов до тех пор, пока служба не будет запущена снова. У меня вопрос: что будет с существующей очередью при ее перезапуске - сохранится ли она? Если нет, как я могу его сохранить? Я явно не хочу, чтобы HTTP-запросы отбрасывались при перезагрузке.

Из официальных документов: http://www.haproxy.org/download/1.7/doc/management.txt

HAProxy поддерживает плавную и жесткую остановку. Жесткая остановка проста: когда сигнал SIGTERM отправляется процессу haproxy, он немедленно завершается, а все установленные соединения закрываются. Изящная остановка запускается, когда сигнал SIGUSR1 отправляется процессу haproxy. Он состоит только в отвязке от прослушивающих портов, но продолжает обрабатывать существующие соединения, пока они не закроются. Как только последнее соединение закрывается, процесс завершается.

Метод жесткого останова используется для действий «стоп» или «перезапуск» сценария управления службами. Плавная остановка используется для действия «перезагрузка», которое пытается беспрепятственно перезагрузить новую конфигурацию в новом процессе.

Оба этих сигнала могут быть отправлены самим новым процессом haproxy во время перезагрузки или перезапуска, так что они будут отправлены в самый последний возможный момент и только в случае крайней необходимости. Это то, что выполняется опциями «-st» (жесткий) и «-sf» (изящный) соответственно.

Так, в частности:

Это [постепенная остановка] заключается только в отключении от прослушивающих портов, но продолжении обработки существующих соединений до их закрытия.

Акцент: но продолжать обрабатывать существующие соединения

Вы можете увидеть, что внутренняя очередь упала до 0, потому что это статистика для вновь сформированной внутренней очереди нового процесса. Старый, заполненный до максимума, больше не отображается, поскольку он принадлежал предыдущему процессу. Но он обрабатывается, согласно этой ссылке, которая также включает тестовый сценарий, чтобы убедиться в этом самостоятельно:

http://comments.gmane.org/gmane.comp.web.haproxy/7815