Могу ли я корректно перезапустить httpd, redis и php-fpm, не затрагивая посетителей моего сайта?

522
WackGet

Я использую довольно ресурсоемкий сайт на основе Magento через комбинацию Apache httpd, redis и php-fpm.

Когда я делаю изменения в основных файлах PHP, необходимо перезапустить вышеперечисленные службы, чтобы убедиться, что старый код не кэшируется, что может (и может) испортить Magento.

Раньше, когда я только использовал httpd, я просто бегал, service httpd gracefulчтобы изящно перезапустить, не затрагивая посетителей сайта, но теперь, когда мне нужно перезапустить несколько сервисов (и сбросить redis), сайт был недоступен в течение нескольких секунд.

Можно ли этого избежать?

0
Как вы думаете, можно перезапустить сервер, не отключая его? Alexiy 8 лет назад 0
@Alexiy: новый процесс наследует FD прослушивания и немедленно начинает принимать новые подключения, в то время как старый процесс продолжает обрабатывать существующие FD соединения, пока все они не завершатся. grawity 8 лет назад 0

1 ответ на вопрос

1
Seth

Если вы посмотрите документацию Apache, то увидите, что Apache использует USR1для этого сигнал. Как таковая, это обычная рутина. Вы должны будете проверить документацию других компонентов, чтобы видеть, предлагают ли они подобные варианты или нет. Например, один из совпадений для php-fpm: можно ли перезагрузить один из пулов PHP-FPM, не мешая другим? ?

Если один из компонентов не имеет такой опции, вы не сможете сделать это с одним сервером / сайтом. Вам понадобится какой-нибудь кластер или балансировщик, который позволит вам перенаправить пользователей на новую версию и через некоторое время отключить старую версию. Альтернативой может быть график перезапуска на некоторое время с малым трафиком (например, ночью).

Похожие вопросы