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

Изящный перезапуск Apache и соединения Keep-Alive

Я пытаюсь найти способ быстро перезапустить Apache, чтобы применить изменения конфигурации. Целью является:

  1. Перезапустить без распределения обрабатываемых в данный момент запросов
  2. Делайте это как можно более атомарно, то есть новая конфигурация должна применяться ко всем новым запросам, полученным с момента перезапуска, никакие новые запросы не должны обрабатываться старой версией.

Apache имеет команду плавного перезапуска, которая удовлетворяет первой цели, команда перезапуска выполняется немедленно, и существующие запросы не затрагиваются. Однако перезапуск не атомарный. Если есть существующие подключения к серверу в состоянии Keep-Alive, то все следующие запросы, которые они отправляют, обрабатываются старыми процессами со старой конфигурацией.

В моем случае сервер Apache находится за балансировщиком нагрузки, который может отправлять сотни запросов по одному соединению. Таким образом, после перезапуска требуется много долгих минут, пока новая конфигурация не будет применена ко всем новым запросам.

Есть ли способ исправить это, например заставить Apache закрыть любое существующее соединение Keep-Alive со старым процессом после того, как он завершит обслуживание текущего запроса?

Перемена KeepAlive Off, выполните плавный перезапуск и отключите его некоторое время, внесите изменения в конфигурацию и выполните еще один плавный перезапуск. Это похоже на практику уменьшения TTL для записи DNS перед изменением.

Как насчет настройки MaxKeepAliveReqests и вашего KeepAliveTimeout достаточно низкий, чтобы клиенты могли использовать keepalive, но не поддерживать эти соединения так долго?