Перезапуск веб-сервера без влияния на пользователей?
Есть несколько методов, которые я могу придумать для этого:
- Настройка реплики веб-сервера на другой порт и / или IP, затем использование DNS в качестве балансировщика нагрузки; перезапуск одного сервера за раз
- Использование более явной балансировки нагрузки (которую используют PaaS, такие как Heroku и OpenShift) с неявными репликами
- Использование некоторого встроенного механизма (например, в nginx)
Я работаю в рамках решения I aaS и буду настраивать git
и некоторые слушатели для обработки всей этой установки.
Каков наилучший способ перезапуска веб-сервера - чтобы моя последняя версия моего веб-приложения на Python могла начать работу - без заметного влияния на посетителей / пользователей / клиентов сайта?
1 ответ
Чем проще, тем лучше, без серебряной пули.
Для одного сервера может помочь механизм изящного перезапуска. Он запустит новые процессы, чтобы принять новые запросы, и будет поддерживать старые процессы до завершения старых запросов. Nginx уже использует это, см. http://wiki.nginx.org/CommandLine
Для нескольких серверов рекомендуется использовать обратный прокси-сервер. Пример структуры выглядит следующим образом, и ее можно легко построить с помощью Nginx:
Если какой-либо из внутренних серверов вышел из строя, обратный прокси-сервер может отправлять запросы на другие исправные серверы и не будет влиять на пользователей. Вы можете настроить стратегию балансировки нагрузки для более детального управления. И вы также можете гибко добавить сервер для увеличения или выбрать сервер для устранения неполадок или обновления кода.