тлдр; Как настроить модуль событий Apache MPM в качестве функционального обратного прокси-сервера при работе за высокопроизводительным балансировщиком нагрузки приложений AWS?
Макет
Балансировщик нагрузки приложений AWS -> Apache 2.4.x -> Внутренний балансировщик нагрузки TCP AWS (NLB) -> Серверы приложений Jetty
При использовании параметра конфигурации, показанного ниже, модуль событий Apache MPM не является стабильным из-за балансировщика нагрузки приложений AWS. Время отклика значительно увеличилось, и запросы периодически терпят неудачу из-за ошибок 502, возвращаемых ALB.
Конфигурация рабочего
Серверный лимит 250
Стартовые серверы 100
Минспаретредс 75
Максспаретредс 250
ThreadLimit 64
ThreadsPerChild 64
Максрекуестворкерс 8000
Конфигурация ProxyPass
enablereuse = при получении = 10 время ожидания соединения = 2 время ожидания = 55 макс = 400 повторных попыток = 0 keepalive = вкл.
Событие MPM против работника MPM
Переключение на рабочий модуль MPM показывает мгновенное улучшение времени отклика, а ошибки 502 полностью исчезают.


Отладка
Мне удалось отследить 502 ошибки, возвращенные ALB, до 408 ошибок, возвращенных Jetty. Jetty, похоже, выдает ошибки из-за тайм-аутов при чтении запроса.
Запуск Ubuntu 20.04 с Apache 2.4.41-4ubuntu3.8.
Интересные заметки
- Запросы через AWS Network Load Balancer (NLB) к тем же экземплярам Apache обрабатываются быстро и не показывают ошибок 502.