Моя текущая установка - это nginx в качестве балансировщика нагрузки перед кучей вышестоящих серверов.
Я хочу иметь возможность развертывать без каких-либо изменений в пользовательском опыте. Это означает отсутствие 502-х и увеличения времени загрузки страниц.
Я так понимаю, когда nginx -s reload
, nginx изящно создаст новые потоки для обработки новых подключений для новой конфигурации, но все равно завершит обработку запросов, которые находились в полете во время перезагрузки. Более того, я где-то читал, что отметка апстрима как down
в блоке восходящего потока и перезагрузка возьмет это восходящее направление из ротации, но все равно завершит любые соединения с ним в полете.
Все это правильно?
Текущий план состоит в том, чтобы иметь небольшой процесс на хосте nginx, который будет в основном изменять конфигурацию nginx и выполнять эти плавные перезагрузки, когда их попросят сделать это через внутренний REST API.
Затем мой инструмент развертывания подключит этот процесс и последовательно добавит / удалит мои восходящие потоки из конфигурации nginx после завершения корректного завершения работы и загрузки / разогрева для каждого восходящего потока.
Имеет ли это смысл? Как это делают другие люди? Есть ли для этого уже доступные инструменты?
Мне не очень повезло с поиском информации по этому поводу ...
Да, вы правы, полагая, что nginx продолжит обработку текущих запросов при перезагрузке и начнет обрабатывать новые запросы с новой конфигурацией.
http://nginx.org/en/docs/beginners_guide.html#control
Старые рабочие процессы, получив команду на завершение работы, перестают принимать новые соединения и продолжают обслуживать текущие запросы, пока все такие запросы не будут обслужены. После этого старые рабочие процессы завершаются.
Пометка восходящего потока как down
существенно не отличается от удаления из конфигурации. В обоих случаях он не будет принимать новые запросы.
Мы часто перезагружаем конфигурацию nginx (созданную с помощью cog https://nedbatchelder.com/code/cog/), и это не вызывает простоев прокси, поскольку вверх по течению локации. Пока восходящий поток готов обрабатывать запросы, простоя нет.