Можем ли мы перезагрузить один из пулов PHP-FPM, не беспокоя других

У меня есть несколько пулов сокетов PHP-FPM UNIX для одного и того же хоста, чтобы иметь логическое разделение кодовой базы / функциональности и для решения проблемы будущего масштабирования. Nginx управляет маршрутизацией в правый сокет на основе шаблонов URI. Развертывание работает нормально.

Всякий раз, когда я изменяю конфигурацию пула для любого, я перезагружаю / перезапускаю процесс FPM (по сигналу USR2).

Я не имею ни малейшего представления о том, как работают внутренние функции FPM, но я предполагаю, что при перезапуске основного процесса все пулы перезапускаются / перезагружаются. Пожалуйста, поправьте меня, если я ошибаюсь.

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

Я также был бы признателен за любые другие предложения по конфигурации, которые могли бы позволить мне иметь желаемое управление пулами

php-fpm позволяет изящный перезапуск дочерних элементов, обычно с ключевым словом reload вместо restart в скрипте init, отправляя сигнал USR2.

Поэтому, выполняя грациозный перезапуск, вы не должны потерять любую транзакцию. Дети убиваются после окончания текущего управления запросами для каждого из них. Этого должно быть достаточно, если вам не нужен реальный перезапуск. Я сделал несколько тестов и, например, достаточно перезагрузки:

  • очистить кеш APC
  • изменить путь к файлу журнала
  • изменить минимальные / максимальные / начальные настройки

Поэтому я не нашел случая, когда еще нужен реальный перезапуск. За исключением того, что перезагрузка не может запустить остановленную службу .

Если вы хотите, чтобы другие пулы никогда не перезагружались, когда вы хотите перезагрузить один из них, вам придется управлять несколькими демонами php-fpm и одним пулом на каждого демона. Это подразумевает запись нескольких сценариев инициализации и основных файлов конфигурации.

Использование ключевого слова restart более опасно, особенно потому, что сценарий инициализации, возможно, убивает длительных пользователей на этапе остановки. И с несколькими демонами, управляемыми несколькими PID и конфигурационными файлами, вы даже можете получить команду start-stop-daemon с опцией --exec (это так в debian), и это убьет всех демонов, работающих с тем же исполняемым файлом php-fpm (эффективно отправляя kill -9 всем остальным параллельным php-fpm-демонам после остановки правой с правильным PID, если вы запускаете несколько процессов php-fpm, что очень плохо).

Поэтому использование ключевого слова reload (USR2 signal) является обязательным.