LINUX.ORG.RU
решено ФорумAdmin

Как правильно остановить nginx?

 


0

3

Добрый день.

Такой вопрос: У меня есть несколько nginx 1.2.3, соединённых последовательно: NG1 -> NG2 -> WEB-APPS.

Схема включения - древовидная: NG2 - N штук. WEB-APPS - N*M штук.

Я хочу перезагрузить часть своих веб приложений прозрачно для пользователей. Как мне правильно сделать?

Подозреваю, что достаточно на время перезагрузки приложений выключить интстанс NG2, который их обслуживает. Но тут возникает ряд вопросов:

Поймёт ли NG1 то, что часть инстансов NG2 выключена и перебросит ли он новые запросы на работающие инстансы?

Как мне выключить инстанс NG2 так, чтобы существующие запросы не были оборваны? Т.е. новые запросы он обрабатывать не должен, но запросы, которые он уже пробросил он должен держать, пока мои сервера не отдадут весь контент.

Читал документацию, но она мне показалась противоречивой. Например я не понял, достугну ли я цели, если сделаю так?

service nginx stop

может с такой сложной схемой имеет смысл посмотреть на haproxy?

а по нжинксу, если используется ip_hash то можно пометить ноду как down и после ее ребутнуть, в другом случае... разве что вывести ноду из апстрима и после пустить ее в ребут, хотя к чему это приведет хз

Skolotovich ★★★
()

1) закомментировать в конфиге NG1 одну или несколько NG2

2) kill -HUP <NG1 pid> // NG1 перечитает свой конфиг и больше не будет обращаться к закомментированным NG2

3) перезапустить WEB-APPs привязанные к неактивным NG2

4) раскомментировать отключенные NG2 в конфге NG1 и опять сделать kill -HUP...

fjoe
()
Ответ на: комментарий от fjoe

1) закомментировать в конфиге NG1 одну или несколько NG2

и что нжинкс будет делать с текущими соединениями? 503? или корректно отбалансирует на другую ноду?

Skolotovich ★★★
()
Ответ на: комментарий от Skolotovich

и что нжинкс будет делать с текущими соединениями?

продолжит их обслуживать, но новые запросы отправляться не будут.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

правда, не понятно что будет с теми у кого persistent connection. По-моему, пока все старые клиенты не отвалятся старые процессы не отомрут. А это может быть долго.

true_admin ★★★★★
()
Ответ на: комментарий от fjoe

закомментировать в конфиге NG1 одну или несколько NG2

Пробовал. Но то ли лыжи не едут, то ли ещё что, но даже после service nginx reload NG1 продолжал перебрасывать соединения на закоментаренные NG2.

telek1024
() автор топика

Сделал я так: останавливаю NG2 командой: nginx -s quit Жду, пока не завершатся все его инстансы. Похоже (?) из коробки NG1 понимает, что какие-то инстансы NG2 отвалились и не перебрасывает на них запросы. В логах 404 ошибок нет. Перезагружаю всё, что мне нужно. Запускаю NG2.

telek1024
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.