You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by János Löbb <ja...@yale.edu> on 2011/04/11 23:38:32 UTC
[Cluster] fail over is failing on application stop
Hi,
I started a new thread. I have two machines bml0065 and bml0066. Both have OSX 10.6.5, httpd 2.2.17, tomcat 7.0.10, jk 1.2.31. The bml0065 machine acts as a reverse proxy.
Here is the server.xml from bml0066, without comments:
<nyissz>
<?xml version='1.0' encoding='utf-8'?>
<Server port="8105" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8180" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8143" />
<Connector port="8143" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="/Users/administrator/.keystore" keystorePass="ITAccess"
clientAuth="false" sslProtocol="TLS" />
<Connector port="8109" protocol="AJP/1.3" redirectPort="8143" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" resolveHosts="false"/>
</Host>
</Engine>
</Service>
</Server>
<nyassz>
Similar server.xml exists for the other machine bml0065 only the jvmRoute and the ports are different.
Here is a snippet showing the distributable tag in web.xml in the WEB-INF directory of the examples web app:
<nyissz>
<!-- Temporarily the distributable tag goes here -->
<!-- It should be in the given webapp's web.xml -->
<distributable/>
</web-app>
<nyassz>
I created an examples.xml in the $CATALINA_BASE/conf/Catalina/localhost directory on both machines and the content of that file is this:
<nyissz>
bml0066:local administrator$ cat tomcat1/conf/Catalina/localhost/examples.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context className="org.apache.catalina.ha.context.ReplicatedContext"/>
<nyassz>
Unfortunately if I have just <Context org.apache.catalina.ha.context.ReplicatedContext/> there then I receive these type of messages:
Apr 11, 2011 4:13:39 PM org.apache.tomcat.util.digester.Digester fatalError
SEVERE: Parse Fatal Error at line 18 column 59: Attribute name "org.apache.catalina.ha.context.ReplicatedContext" associated with an element type "Context" must be followed by the ' = ' character.
I did a little test. I opened the URL http://bml0065.yalepath.org/tc/examples/servlets/servlet/SessionExample on my machine /bml0041/. The reverse proxy sent the request to itself, then jk sent it to the tomcat3 instance on the same machine. I can see in the log of bml0065:
<nyissz>
INFO: Server startup in 6161 ms
Apr 11, 2011 4:40:47 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: sessionCreated('CA87BED01E4A1D0FF87AED173F66E35C.tomcat3')
Apr 11, 2011 4:41:04 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: attributeAdded('CA87BED01E4A1D0FF87AED173F66E35C.tomcat3', 's1', 't3')
Apr 11, 2011 4:41:37 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'
Apr 11, 2011 4:41:37 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: init: Global resources are available
Apr 11, 2011 4:41:37 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
<nyass>
Looking at the tomcat log on the other machine - bml0066 - I can see that the session is replicated:
<nyissz>
Apr 11, 2011 4:40:47 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: sessionCreated('CA87BED01E4A1D0FF87AED173F66E35C.tomcat3')
Apr 11, 2011 4:41:04 PM org.apache.catalina.core.ApplicationContext log
INFO: SessionListener: attributeAdded('CA87BED01E4A1D0FF87AED173F66E35C.tomcat3', 's1', 't3')
<nyassz>
Then I stop the examples application on the bml0065 machine running the tomcat3 instance.
Then I try to access it via the URL http://bml0065.yalepath.org/tc/examples/servlets/servlet/SessionExample
That is when I receive the 404 page:
<nyissz>
HTTP Status 404 - /examples/servlets/servlet/SessionExample
type Status report
message /examples/servlets/servlet/SessionExample
description The requested resource (/examples/servlets/servlet/SessionExample) is not available.
Apache Tomcat/7.0.10
<nyassz>
This not what I expected. Because the session was replicated to the bml0066 machine I expected that jk will re-route the request to the tomcat1 instance running on the bml0066 machine.
What configuration option or tag should I change to achieve tat result ?
What am I doing wrong ?
If I instead of stoping just the examples application stop the whole tomcat3 instance the fail over is successful. I guess it does because there is no more heartbeats from the tomcat3 instance. So what config is needed for mod_jk to sense that the app was stopped and re-route the request to the replicated session on tomcat1 instance ?
Here is my workers.properties from bml0065:
<nyissz>
worker.list = lb,jkstatus
worker.lb.type=lb
worker.lb.balance_workers=tomcat1,tomcat3
#,tomcat2,tomcat4
worker.lb.sticky_session = True
worker.lb.sticky_session_force = False
worker.jkstatus.type=status
worker.tomcat1.type = ajp13
worker.tomcat1.host = bml0066.yalepath.org
worker.tomcat1.port = 8109
worker.tomcat1.lbfactor = 1
worker.tomcat1.redirect=tomcat3
#worker.tomcat2.type = ajp13
#worker.tomcat2.host = bml0066.yalepath.org
#worker.tomcat2.port = 8209
#worker.tomcat2.lbfactor = 1
#worker.tomcat2.redirect=tomcat4
worker.tomcat3.type = ajp13
worker.tomcat3.host = bml0065.yalepath.org
worker.tomcat3.port = 8309
worker.tomcat3.lbfactor = 1
worker.tomcat3.redirect=tomcat1
#worker.tomcat4.type = ajp13
#worker.tomcat4.host = bml0065.yalepath.org
#worker.tomcat4.port = 8409
#worker.tomcat4.lbfactor = 1
#worker.tomcat4.redirect=tomcat2
<nyassz>
Thanks ahead,
János
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org