----- Original Message -----

> From: Nilesh - MiKu <niles...@directi.com>
> To: users@tomcat.apache.org
> Cc: 
> Sent: Monday, June 13, 2011 8:36 AM
> Subject: Tomcat 6.0.18 clustering problem
> 
> Hi people...
> 
> Background :
> 
> I have two nodes (say, n1 and n2) running 3 instances of tomcat (say t1, t2,
> t3), with n1 running t1, t3 and n2 running t2. (All running same
> application.). I want to make clustering for n1-t1 and n2-t2.
> 
> Clustering cofig for n1-t1 is....
> 
> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
> channelSendOptions="8">
> 
> <Manager className="org.apache.catalina.ha.session.DeltaManager"
> expireSessionsOnShutdown="false" 
> notifyListenersOnReplication="true"/>
> 
> <Channel 
> className="org.apache.catalina.tribes.group.GroupChannel">
> <Membership 
> className="org.apache.catalina.tribes.membership.McastService"
> address="228.0.0.4"
> port="45564"
> frequency="500"
> dropTime="3000"/>
> 
> <Receiver 
> className="org.apache.catalina.tribes.transport.nio.NioReceiver"
> address="auto"
> port="4000"
> autoBind="100"
> selectorTimeout="5000"
> maxThreads="6"/>
> 
> <Sender
> className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
> <Transport
> className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
> </Sender>
> 
> <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>
> <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
> <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
> </Channel>
> 
> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
> filter=".*\.ico;.*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;"/>
> 
> <ClusterListener
> className="org.apache.catalina.ha.session.ClusterSessionListener"/>
> 
> </Cluster>
> 
> Clustering cofig for n2-t2 is same as above....
> 
> n1-t3 has element <Cluster> commented and is not participating in 
> clustering
> at all. Its being used for some other special purpose.
> 
> Here is what i get when i start the tomcat instance.
> 
> Jun 11, 2011 9:26:18 AM org.apache.catalina.core.AprLifecycleListener init
> INFO: The APR based Apache Tomcat Native library which allows optimal
> performance in production environments was not found on the
> java.library.path: /usr/lib/jvm/jav
> a-1.6.0-sun-1.6.0.13/jre/lib/amd64/server:/usr/lib/jvm/java-1.6.0-sun-1.6.0.13/jre/lib/amd64:/usr/lib/jvm/java-1.6.0-sun-1.6.0.13/jre/../lib/amd64:/usr/java/packages
> /lib/amd64:/lib:/usr/lib
> Jun 11, 2011 9:26:18 AM org.apache.coyote.http11.Http11Protocol init
> INFO: Initializing Coyote HTTP/1.1 on http-8080
> Jun 11, 2011 9:26:18 AM org.apache.catalina.startup.Catalina load
> INFO: Initialization processed in 446 ms
> Jun 11, 2011 9:26:18 AM org.apache.catalina.core.StandardService start
> INFO: Starting service Catalina
> Jun 11, 2011 9:26:18 AM org.apache.catalina.core.StandardEngine start
> INFO: Starting Servlet Engine: Apache Tomcat/6.0.18
> Jun 11, 2011 9:26:18 AM org.apache.catalina.ha.tcp.SimpleTcpCluster start
> INFO: Cluster is about to start
> Jun 11, 2011 9:26:18 AM org.apache.catalina.tribes.transport.ReceiverBase
> bind
> INFO: Receiver Server Socket bound to:/70.87.28.134:4000
> Jun 11, 2011 9:26:18 AM
> org.apache.catalina.tribes.membership.McastServiceImpl setupSocket
> INFO: Setting cluster mcast soTimeout to 500
> Jun 11, 2011 9:26:18 AM
> org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> INFO: Sleeping for 1000 milliseconds to establish cluster membership, start
> level:4
> Jun 11, 2011 9:26:19 AM
> org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> INFO: Done sleeping, membership established, start level:4
> Jun 11, 2011 9:26:19 AM
> org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> INFO: Sleeping for 1000 milliseconds to establish cluster membership, start
> level:8
> Jun 11, 2011 9:26:20 AM
> org.apache.catalina.tribes.membership.McastServiceImpl waitForMembers
> INFO: Done sleeping, membership established, start level:8
> Jun 11, 2011 9:26:20 AM org.apache.catalina.loader.WebappClassLoader
> validateJarFile
> INFO: validateJarFile(/opt/
> mail.pw/webapps/pw-mail/WEB-INF/lib/selenium-server-0.9.2-standalone.jar) -
> jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending
> class: javax/servlet/Servlet.class
> Jun 11, 2011 9:26:20 AM org.apache.catalina.loader.WebappClassLoader
> validateJarFile
> INFO: validateJarFile(/opt/
> mail.pw/webapps/pw-mail/WEB-INF/lib/servlet-api-2.5-6.1.11.jar) - jar not
> loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: ja
> vax/servlet/Servlet.class
> Jun 11, 2011 9:26:21 AM org.apache.catalina.ha.session.DeltaManager start
> INFO: Register manager /pw-mail to cluster element Engine with name Catalina
> Jun 11, 2011 9:26:21 AM org.apache.catalina.ha.session.DeltaManager start
> INFO: Starting clustering manager at /pw-mail
> Jun 11, 2011 9:26:21 AM org.apache.catalina.ha.session.DeltaManager
> getAllClusterSessions
> INFO: Manager [localhost#/pw-mail]: skipping state transfer. No members
> active in cluster group.
> Jun 11, 2011 9:26:28 AM org.apache.catalina.ha.session.DeltaManager start
> INFO: Register manager /manager to cluster element Engine with name Catalina
> Jun 11, 2011 9:26:28 AM org.apache.catalina.ha.session.DeltaManager start
> INFO: Starting clustering manager at /manager
> Jun 11, 2011 9:26:28 AM org.apache.catalina.ha.session.DeltaManager
> getAllClusterSessions
> INFO: Manager [localhost#/manager]: skipping state transfer. No members
> active in cluster group.
> Jun 11, 2011 9:26:28 AM org.apache.coyote.http11.Http11Protocol start
> INFO: Starting Coyote HTTP/1.1 on http-8080
> Jun 11, 2011 9:26:28 AM org.apache.jk.common.ChannelSocket init
> INFO: JK: ajp13 listening on /0.0.0.0:8009
> Jun 11, 2011 9:26:28 AM org.apache.jk.server.JkMain start
> INFO: Jk running ID=0 time=0/24  config=null
> Jun 11, 2011 9:26:28 AM org.apache.catalina.startup.Catalina start
> INFO: Server startup in 10245 ms
> 
> Note : context for all instances is pw-mail.
> 
> Can anyone say what is wrong with this configuration.
> 
> 
> -- 
> Best Regards,
> Nilesh Mevada
>

This looks like an AMD 64 bit Linux platform? I'm just guessing based on the 
paths in your mail message.

At any rate, I'll make some comments which will hopefully help.

First of all, I would recommend upgrading to the latest Tomcat 6 version 
(6.0.32) and JRE version if possible. There have been a lot of cluster-related 
patches since 6.0.18. If possible, look at upgrading to the latest Tomcat 7 
version (7.0.14).

From the output, it looks like you have the Selenium server included in your 
application. I think the server version includes an embedded Jetty server, and 
Tomcat is complaining about classes that are included.

See:

> INFO: validateJarFile(/opt/
> mail.pw/webapps/pw-mail/WEB-INF/lib/selenium-server-0.9.2-standalone.jar) -
> jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending
> class: javax/servlet/Servlet.class


I think you'll need the corresponding coreless version, but check the Selenium 
documentation to make sure.

Also, you've included the servlet API in your application. This is shown by:

> INFO: validateJarFile(/opt/
> mail.pw/webapps/pw-mail/WEB-INF/lib/servlet-api-2.5-6.1.11.jar) - jar not
> loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: ja
> vax/servlet/Servlet.class


Don't do this. Your IDE should enable you to write servlet code without it 
packaging up the API. Each IDE is different, so read your documentation.

Make sure that your application is marked distributable by adding 
<distributable/> in your web.xml file. Make sure that all session properties 
implement Serializable.

Your cluster configuration doesn't look too much different than one I use.

> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
> channelSendOptions="8">

I'm not sure why you are using ASYNCHRONOUS as your channelSendOptions 
(especially without an ACK). This will allow session updates to be processed in 
a different order from which they were sent. I don't know how this will impact 
your application.

> <Interceptor
> className="org.apache.catalina.tribes.group.interceptors.TcpPingInterceptor"/>

You're using an interceptor that doesn't seem to be documented. Looking at the 
source code, it appears that this interceptor sends a ping message out every 
second.

> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
> filter=".*\.ico;.*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;"/>

You've removed the htm and html items from the filter, and added ico. I'll 
assume that there are no htm / html files in your application (all pages are 
generated dynamically).

In short, I don't see any show stoppers in your configuration, but maybe other 
list members have some ideas.

However, there could be some system issues that are preventing multicasting 
from working.

1. Make sure your system is set up for multicasting

Check to see if your interface is enabled for multicasting. Mine looks like 
this in part:

eth0      Link encap:Ethernet
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

2. Make sure your firewall allows multicasting. By default, Fedora 15 does not. 
Other Linux distributions may be different. Add the following to your firewall 
rules (adjust for your distribution).

-A INPUT -d 224.0.0.0/4 -m state --state NEW -j ACCEPT

You'll probably want this to be much more restrictive, but this may get you up 
and running.

3. Add a multicast route

Adjust this to fit your distribution and configuration.

/sbin/ip route add to multicast 224.0.0.0/4 dev eth0

Filip Hanik published a link to a multicast test tool (MCaster) that was 
included in (a now ancient version of) Tomcat 4. This was useful in order to 
confirm that you had multicasting set up correctly on your systems. You might 
be able to dig it up and build it by following the Archives link on the Tomcat 
home page.


4. Don't announce multicast on the localhost address.

By default, Tomcat gets the host address for multicasting via 
java.net.InetAddress.getLocalHost().getHostAddress(). Make sure you're not 
advertising 127.0.0.1. In Linux, the most common source of this problem is by 
adding your host name to the localhost line in /etc/hosts.

You can also set up separate logging for clustering by making some changes to 
$CATALINA_HOME/conf/logging.properties

For example:

# Added a cluster logging handler
handlers = 1catalina.org.apache.juli.FileHandler, 
2localhost.org.apache.juli.FileHandler, 3manager.org.apache.juli.FileHandler, 
4host-manager.org.apache.juli.FileHandler, 
java.util.logging.ConsoleHandler,5cluster.org.apache.juli.FileHandler

# specify the level and where to store the information
5cluster.org.apache.juli.FileHandler.level = FINER
5cluster.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
5cluster.org.apache.juli.FileHandler.prefix = cluster.

# various cluster components logging
org.apache.catalina.tribes.MESSAGES.level = FINE
org.apache.catalina.tribes.MESSAGES.handlers = 
5cluster.org.apache.juli.FileHandler

org.apache.catalina.tribes.level = FINE
org.apache.catalina.tribes.handlers = 5cluster.org.apache.juli.FileHandler

org.apache.catalina.ha.level = FINE
org.apache.catalina.ha.handlers = 5cluster.org.apache.juli.FileHander

org.apache.catalina.ha.deploy.level = INFO
org.apache.catalina.ha.deploy.handlers = 5cluster.org.apache.juli.FileHandler

Adjust the logging levels accordingly.

. . . . just my two cents.

/mde/

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to