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

Apache mod_proxy_balancer + балансировка нагрузки Tomcat - не следует перенаправлять, пока веб-приложения не будут готовы

Я использую apache2 mod_proxy и mod_proxy_balancer для балансировки нагрузки до 4 отдельных tomcat8 экземпляры на разных серверах. Я использую разные AJP порты для каждого экземпляра tomcat и использование jvmRoute директива в tomcat server.xml, вот так: Первый экземпляр:

<Connector port="[port1]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

Второй экземпляр:

<Connector port="[port2]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

И так далее.

В конфигурации apache2 я определяю кластер, например:

<Proxy balancer://myCluster>
        BalancerMember ajp://[ip1]:[port1] route=tomcat1 loadfactor=1
        BalancerMember ajp://[ip2]:[port2] route=tomcat2 loadfactor=1
        BalancerMember ajp://[ip3]:[port3] route=tomcat3 loadfactor=1
        BalancerMember ajp://[ip4]:[port4] route=tomcat4 loadfactor=1

        ProxySet lbmethod=bybusyness
        ProxySet stickysession=JSESSIONID

        Order Deny,Allow
        Deny from none
        Allow from all
 </Proxy>

И директивы proxypass:

ProxyPass / balancer://myCluster/
ProxyPassReverse / balancer://myCluster/
...

Он работает должным образом, балансирует нагрузку должным образом, и если экземпляр Tomcat не работает, load blaancer не перенаправляет на этот экземпляр. До этого момента все работает хорошо.

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

Как я могу справиться с этой ситуацией, чтобы предотвратить перенаправление, пока веб-приложение не будет полностью готово? Как я могу проверить их статус?

Любая помощь очень ценится.

Вероятно, лучший подход - создать своего рода сервлет состояния, который знает, как проверить, полностью ли работает ваш желаемый контекст (война), и использует failonstatus директива.

Другой вариант - использовать http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager в вашем развертывании. Шаги:

  • Отключить рабочего
  • развернуть
  • Подождите, пока он встанет / проверьте
  • Включить работника