We run two tomcats on the same Windows Server 2008 box. They have their
server.xml tweaked so that they use unique ports. Here's a diff:

$ diff server.xml /cygdrive/c/Program\ Files/Apache\ Software\
Foundation/Tomcat\ 6.0/conf/server.xml 
22c22
< <Server port="8105" shutdown="SHUTDOWN">
---
> <Server port="8005" shutdown="SHUTDOWN">
67c67
<     <Connector port="8180" protocol="HTTP/1.1" 
---
>     <Connector port="8080" protocol="HTTP/1.1" 
69c69
<                redirectPort="8543" />
---
>                redirectPort="8443" />
88c88
<     <Connector port="8109" protocol="AJP/1.3" redirectPort="8543" />
---
>     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
100c100
<     <Engine name="WinBox_Temp" defaultHost="localhost"
jvmRoute="WinBox_temp">
---
>     <Engine name="WinBox" defaultHost="localhost" jvmRoute="WinBox">

If we have one of the tomcats broadcast its multicast packets on 228.0.0.0
while the second broadcasts on 224.0.0.0, everything works fine and they
each cluster with other nodes that use those multicast addresses. (Think
"staging" and "prod" clusters)

But when we want two tomcats on the same machine to join the _same_ cluster
(224.0.0.0), we get this in the log file:

SEVERE: Unable to start cluster.
org.apache.catalina.tribes.ChannelException: java.net.SocketException: An
operation was attempted on something that is not a socket; No faulty
 members identified.
        at
org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:169)
        at
org.apache.catalina.tribes.group.ChannelCoordinator.start(ChannelCoordinator.java:97)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:149)
        at
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor.start(MessageDispatchInterceptor.java:147)
       
at
org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:149)
        at
org.apache.catalina.tribes.group.ChannelInterceptorBase.start(ChannelInterceptorBase.java:149)
        at
org.apache.catalina.tribes.group.GroupChannel.start(GroupChannel.java:407)
        at
org.apache.catalina.ha.tcp.SimpleTcpCluster.start(SimpleTcpCluster.java:669)
        at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1035)
        at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at
org.apache.catalina.core.StandardService.start(StandardService.java:516)
        at
org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:578)       
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
    
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)      
 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: java.net.SocketException: An operation was attempted on something
that is not a socket
        at java.net.PlainDatagramSocketImpl.socketSetOption(Native Method)
        at
java.net.PlainDatagramSocketImpl.setOption(PlainDatagramSocketImpl.java:299)
        at java.net.MulticastSocket.setInterface(MulticastSocket.java:420)
        at
org.apache.catalina.tribes.membership.McastServiceImpl.setupSocket(McastServiceImpl.java:206)
        at
org.apache.catalina.tribes.membership.McastServiceImpl.init(McastServiceImpl.java:173)
        at
org.apache.catalina.tribes.membership.McastServiceImpl.<init>(McastServiceImpl.java:169)
        at
org.apache.catalina.tribes.membership.McastService.start(McastService.java:356) 
      
at
org.apache.catalina.tribes.group.ChannelCoordinator.internalStart(ChannelCoordinator.java:154)
       
... 18 more

Here's the juicy part of server.xml:
                   <Membership
className="org.apache.catalina.tribes.membership.McastService"
                               address="224.0.0.0"
                               bind="10.5.1.102"
                               port="45564"
                               frequency="500"
                               dropTime="3000"/>

Naturally, I have googled the exception, but the only hits I have found go
on about corrupted winsock registry entries, which seems irrelevant since
everything works when the two tomcats use separate multicast addresses.

Note that 10.5.1.102 is a statically-assigned IP on this box's second NIC. 

So...
a) Is it possible to run two tomcat nodes in the same cluster on the same
windows box?
b) If so, what's the magic to keep windows happy? It _appears_ that windows
won't let the two tomcats bind to the same multicast address/port. (Same
config works fine on Linux.)

Thanks!
--johnt
-- 
View this message in context: 
http://old.nabble.com/Error-running-two-tomcats-in-same-cluster-on-same-Windows-box-tp26896489p26896489.html
Sent from the Tomcat - User mailing list archive at Nabble.com.


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

Reply via email to