Я использую экземпляр Apache Httpd в качестве прокси-сервера перед несколькими экземплярами Java Tomcat. Apache действует как балансировщик нагрузки для экземпляров Tomcat.
Конфигурация apache в основном выглядит следующим образом
<Proxy balancer://mycluster>
BalancerMember ajp://host1:8280 route=jvmRoute-8280
BalancerMember ajp://host2:8280 route=jvmRoute-8280
BalancerMember ajp://host3:8280 route=jvmRoute-8280
</Proxy>
<VirtualHost *:80>
ProxyPass / balancer://mycluster/
ProxyPassReverse / balancer://mycluster/
</VirtualHost>
Это в основном работает, когда порты AJP настроены в экземплярах Tomcat. Запросы отправляются на один из хостов, а загрузка распределяется по экземплярам Tomcat.
Однако я вижу очень длительные задержки, которые, как представляется, вызываются внутри Httpd, когда один из хостов недоступен, т.е. кажется, Apache не помнит, что один из хостов недоступен и неоднократно пытается отправить запросы также отсутствующим хостов вместо отправки его одному из доступных хостов и попытке неудачного хоста через некоторое время.
Есть ли способ настроить mod_proxy et.al. от Apache Httpd для поддержки такого сценария перехода на другой ресурс, т.е. с несколькими узлами и не вызывать больших задержек при сбое одного хоста? Предпочтительно Apache должен периодически проверять фон, в котором хосты исчезли, а не как их для любых запросов.
Я нашел HAProxy, который, похоже, больше подходит для такого рода вещей, но я предпочел бы придерживаться Apache по ряду несвязанных причин.
Update
Тем временем я узнал, что часть моей проблемы была вызвана клиентами, которые постоянно закрывали соединение и, следовательно, больше не было подключений/потоков.
Таким образом, я меняю вопрос на: Какие параметры конфигурации вы использовали бы для минимизации эффекта чего-то подобного? То есть разрешить много открытых соединений или быстро закрыть их в этом случае? В противном случае это звучит как очень простая DOS-атака с моей текущей конфигурацией?