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

Кластер Tomcat mod_jk пропустить статус 404 http

я пытаюсь Tomcat Clustering с участием mod_jk месяцами и пока не так уж плохо, но столкнулся с проблемой во время развертывания. Я использую FarmDeployer для копирования и развертывания WAR на других узлах в кластере, но большую часть времени WAR не развертывается должным образом, и поэтому страница остается в 404 ошибка. Даже после удаления взорванного каталога war и повторного извлечения WAR-файла с помощью tomcat браузер не мог отобразить реальный сайт, пока я не перезапущу / не остановлю службу tomcat на этом конкретном узле (конечно, http: // узел-ip / myapp работает если перебросить войну, но не http://site1.mydomain.net после рендеринга 404 страницы). А также я думаю, что эта проблема связана с браузером (пробовал все браузеры), поскольку страница отображается на других компьютерах при повторном развертывании после ошибки 404. Я тоже пробовал fail_on_status и поэтому он переводит узлы на стадию ошибки, которая когда-либо отображает статус 404 http и перенаправляет на другой узел, НО при моем тестировании я обнаружил, что он полностью переводит эти узлы в состояние ошибки, и ни один запрос не отправляется этим узлам до перезапуска, хотя они снова работают .

Workers.properties на балансировщике нагрузки:

workers.tomcat_home=/usr/share/tomcat
workers.java_home=/usr/lib/jvm/java-6-openjdk
ps=/
worker.list=cluster,balancer1,status

worker.balancer1.port=8009        
worker.balancer1.host=localhost
worker.balancer1.type=ajp13
worker.balancer1.lbfactor=2
worker.balancer1.cache_timeout=20
worker.balancer1.socket_timeout=20
#worker.balancer1.fail_on_status=-404,-503

worker.web1.port=8009        
worker.web1.host=192.168.1.8
worker.web1.type=ajp13
worker.web1.lbfactor=4
worker.web1.redirect=web2
worker.web1.cache_timeout=20
worker.web1.socket_timeout=20 
#worker.web1.fail_on_status=-404,-503

worker.web2.port=8009        
worker.web2.host=192.168.1.9
worker.web2.type=ajp13
worker.web2.lbfactor=4
worker.web2.redirect=web1
worker.web2.cache_timeout=20
worker.web2.socket_timeout=20 
#worker.web2.fail_on_status=-404,503

worker.cluster.type=lb
worker.cluster.balance_workers=web1,web2,balancer1
worker.cluster.sticky_session=True
worker.cluster.sticky_session_force=False

# Status worker for managing load balancer
worker.status.type=status

У кого-нибудь есть идея пропустить узел ошибки 404 и вместо этого поразить другие правильно развернутые узлы ?. По крайней мере, любые советы по настройке, если что-либо, чтобы она отображала фактическую страницу после столкновения с 404, имеющего stickey session включен.

Обновление: 1

Виртуальный хостинг Apache на балансировщике нагрузки (192.168.1.5 или балансировщик1):

<VirtualHost *:80>
ServerName site1.mydomain.net
JkAutoAlias /usr/share/tomcat/webapps/myapp
DocumentRoot /usr/share/tomcat/webapps/myapp

JkMount / cluster
JkMount /* cluster
JkMount /*.jsp cluster
  JkUnMount /myapp/*.html cluster
  JkUnMount /myapp/*.jpg  cluster
  JkUnMount /myapp/*.gif  cluster
  JkUnMount /myapp/*.png  cluster
  JkUnMount /myapp/*.css  cluster 

JkUnMount /abc cluster
JkUnMount /abc/* cluster
  JkUnMount /*.html cluster
  JkUnMount /*.jpg  cluster
  JkUnMount /*.gif  cluster
  JkUnMount /*.png  cluster
  JkUnMount /*.css  cluster

ProxyRequests Off
ProxyPreserveHost On
ProxyVia On 
<Proxy balancer://ajpCluster/>
    Order deny,allow
    Allow from all
  BalancerMember ajp://192.168.1.8:8009/ route=web1 ttl=60 timeout=20 retry=10
  BalancerMember ajp://192.168.1.9:8009/ route=web2 ttl=60 timeout=20 retry=10
  BalancerMember ajp://192.168.1.5:8009/ route=balancer1 status=+H ttl=60 

  ProxySet lbmethod=byrequests
  ProxySet stickysession=JSESSIONID|jsessionid
</Proxy>

<Location />
  ProxyPass balancer://ajpCluster/ nofailover=off
  ProxyPassReverse balancer://ajpCluster/
</Location>

</VirtualHost>

Виртуальный хостинг Tomcat, общий на всех узлах:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true" deployOnStartup="true">
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

       </Host>

<Host name="site1.mydomain.net" debug="0" appBase="webapps" unpackWARs="false" autoDeploy="false" deployOnStartup="false">
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="virtual_log1." suffix=".log" timestamp="true"/>
<Context path="" docBase="/usr/share/tomcat/webapps/myapps" debug="0" reloadable="true"/>

НЕТ репликации сеанса с кластеризацией Tomcat: Отключено на данный момент при комментировании <cluster> элемент, поскольку он потребляет много памяти, обновляя и постоянно взаимодействуя друг с другом в кластере. На данный момент у меня есть Load balancing и Auto Failover с участием mod_jk или proxy_ajp НО с ошибкой 404 проблема, когда myapp недоступен (и снова доступен), как описано выше. Как все с этим справляются?

Единственное решение, которое я смог найти, - это деактивировать веб-серверы, оставив только один для размещения во время развертывания. После успешного развертывания активируйте веб-серверы и отдельно обновите левый внутренний сервер, отключив его. Возможно, мы могли бы активировать / деактивировать узлы с прокси balancer-manager на виртуальном хостинге или с jkstatus mod_jk в worker.properties, например:

Прокси:

# Balancer-manager, for monitoring
ProxyPass /balancer-manager !
<Location /balancer-manager>
    SetHandler balancer-manager

    Order deny,allow
    Deny from None
    Allow from all
</Location>

mod_jk:

worker.list=cluster,status
................
.............
.......
# Status worker for managing load balancer
worker.status.type=status

Требуется много вмешательства пользователя!