Java Mailing List Archive

http://www.junlu.com/

Home » Home (12/2007) » Apache Tomcat »

A Howto for Tomcat 6.0.9, mod_jk, apache 2.2 load balancing + session replication

Sriram Narayanan

2007-02-13

Replies:

Hi all:

I just got this working, so I thought of posting a small howto for the list :)

================================================

An apache instance (httpd) that serves http://localhost/examples/
where /examples is served by two Tomcat instances (if one is
down/unavailable, then httpd decides to redirect requests to the
second tomcat instances.

What I've got working so far:
- Session replication between the various Tomcat instances in the cluster.
- In case one instance is not available, then apache sends new
requests to the next instance.
- When and instance comes back, it joins the cluster, receives session
replication, and is ready to take over when required.

What else is possible:
- Load balance based on the number of requests already sent to a Tomcat instance
- Configure timeouts, etc
- More information at
http://tomcat.apache.org/connectors-doc/reference/workers.html

What's not possible:
- If the first instance dies, then the second instance carries on
processing from that point.

To try this yourself:
1. Download and install Apache Tomcat 6.0.9

2. In server.xml, uncomment the tag for clustering

3. Edit the webapps/example/WEB-INF/web.xml to include the distributable tag
 <distributable/>

4. Create a copy of this Tomcat folder (say, Tomcat2)

5. Edit the server.xml in Tomcat2. Change all the port numbers. e.g.
change the AJP port number to 8010

6. Download the file
http://mirrors.24-7-solutions.net/pub/apache/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.20/mod_jk-apache-2.2.3.so
and save it as mod_jk.so at apache/modules folder.

7. Place the following contents in the file apache/conf/worker.properties
 # The advanced router LB worker
  worker.list=router,worker2,worker1
 
  # Define a worker using ajp13
  worker.worker1.port=8009
  worker.worker1.host=localhost
  worker.worker1.type=ajp13
  worker.worker1.lbfactor=1
  # Define prefered failover node for worker1
  worker.worker1.redirect=worker2
 
  # Define another worker using ajp13
  worker.worker2.port=8010
  worker.worker2.host=localhost
  worker.worker2.type=ajp13
  worker.worker2.lbfactor=1
  worker.worker2.mount=/examples/*
  # Disable worker2 for all requests except failover
  worker.worker2.activation=disabled
 
  # Define the LB worker
  worker.router.type=lb
  worker.router.balance_workers=worker1,worker2
 
  worker.list=jkstatus
  # Define a 'jkstatus' worker using status
worker.jkstatus.type=status

8. Edit apache/conf/httpd.conf to include the following:
LoadModule   jk_module modules/mod_jk.so

#AddModule   mod_jk.c

JkWorkersFile conf/worker.properties

JkShmFile   mod_jk.shm
JkLogFile   mod_jk.log

JkLogLevel   info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "

JkMount /jkmanager/* jkstatus

JkMount /examples/* router

9. Start the two Tomcat instances
 You should see some replication related messages in the console

 Feb 13, 2007 8:01:34 PM org.apache.catalina.ha.tcp.SimpleTcpCluster memberAdded
 INFO: Replication member
added:org.apache.catalina.tribes.membership.MemberImpl[
 tcp://Ramn.corporate.thoughtworks.com:4001,Ramn.corporate.thoughtworks.com,4001,
  alive=1016,id={99 34 -19 82 10 -107 64 51 -119 77 9 -117 -91 9 24 -9
}, payload
={}, command={}, domain={}, ]

INFO: Manager [localhost#/examples]; session state send at 2/13/07 8:01 PM recei
ved in 125 ms.


10. Restart the httpd web server

Testing the session replication
1. Browse to http://localhost/examples/

2. Try the Session examples for the servlet.

3. Set a variable into the session with a value

4. Stop the first Tomcat instance

5. Set another variable into the session.
 This time, the second Tomcat instance will serve the content
 You'll see that the first variable is still in the session. This is a
sign that replication has been successful.

6. Restart the first instance, wait for it to enter the cluster and
for the replication to happen
INFO: Manager [localhost#/examples]; session state send at 2/13/07 8:01 PM recei
ved in 125 ms.

7. Stop the second Tomcat instance.

8. Set another variable into the session.

9. You'll see that all the variables are still available.

-- Sriram

---------------------------------------------------------------------
To start a new topic, e-mail: users@(protected)
To unsubscribe, e-mail: users-unsubscribe@(protected)
For additional commands, e-mail: users-help@(protected)

©2008 junlu.com - Jax Systems, LLC, U.S.A.