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

Безопасная перезагрузка процессов mod_wsgi в продакшене

Есть ли способ безопасно перезапустить процессы mod_wsgi по запросу, возможно, запущенные на нескольких машинах? Я обслуживаю приложение django с mod_wsgi в режиме демона с apache:

WSGIDaemonProcess myapp user=user group=user processes=30 threads=1
WSGIProcessGroup myapp

Я прочитал предложения в mod_wsgi документация но ни одно из предложенных решений не работает для меня:

  1. В производственной системе запускать сценарий мониторинга не рекомендуется.
  2. В моем случае отправка сигналов об уничтожении небезопасна. Я не хочу прерывать выполнение запросов. Перезагрузка не должна приводить к прекращению работы службы. Замедление - это нормально.
  3. Касаясь mod_wsgi Файл конфигурации делает фокус безопасно, но как это сделать на нескольких машинах?

В идеале мы должны иметь возможность перезапустить процессы одним действием. Какие-либо предложения?

Примечание: мне нужно запустить несколько процессов в одном потоке. Мое приложение не является потокобезопасным.


Изменить, я могу сделать это из Puppet, если это единственный вариант, который у меня есть. но я предпочитаю, если есть способ сделать это из специального защищенного представления. Я думаю, что это тривиально сделать на одной машине, но не на нескольких


большое спасибо

Нет разницы между (2) и (3) в том, как выполняются существующие запросы. Отправка kill SIGINT не просто завершает процесс, но запускает такое же упорядоченное завершение работы, как и (2). Фактически, (2) внутренне просто отправляет SIGINT самому себе. Важно определить процессы, которым нужно послать SIGINT. Для этого вы должны использовать опцию 'display-name' для WSGIDaemonProcess, чтобы они назывались в выводе 'ps' и их было легче идентифицировать.

Прикосновение к файлу конфигурации mod_wsgi помогает безопасно, но как это сделать на нескольких машинах?

Я думаю, это решает проблему того, как запустить mod_wsgi для перезагрузки скриптов очень элегантным способом. Для распределения этого действия по нескольким хостам одновременно рекомендую использовать такую ​​утилиту, как пшш (параллельный ssh). Его настройка не должна быть проблемой.

Прикосновение к файлу конфигурации mod_wsgi помогает безопасно, но как это сделать на нескольких машинах?

Это можно решить, используя общую кодовую базу, например, при монтировании NFS.

В качестве альтернативы это должно быть частью вашего процесса контроля версий / развертывания.

  • Вы используете контроль версий в настоящее время?

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

  • Как вы развертываете свой код?

    Подумайте об использовании чего-то вроде Capistrano или Кукольный и включите действие в рецепт развертывания для обновления этого файла.