0

I have four Windows servers (2012 R2 Standard) and Tomcat (8.0.32) runs on each of them. The servers are fronted with a Kemp LoadMaster for load balancing. Currently, the load balancer and four web servers work correctly, but without clustering.

I hope to use the four web servers to form a clustering. I have to say this. I googled and googled and found tons of tutorials about using Unix or Apache web server as frontend load balance. I am unable to find a single link with step-by-step instructions about how to configure a few Windows servers for Tomcat clustering that does not use Apache web server as frontend load balance.

According to Apache doc (https://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html), I added this to server.xml to each Tomcat, but it is not working.

    <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.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
      </Channel>

      <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
             filter=""/>
      <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

      <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                tempDir="/tmp/war-temp/"
                deployDir="/tmp/war-deploy/"
                watchDir="/tmp/war-listen/"
                watchEnabled="false"/>

      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>

I hope to know what specific things I need to do on these four Windows web servers (or may be the load balancer too?) to make the clustering happen.

Any pointer or input is REALLY appreciated. I really mean it. Thank you.

curious1
  • 14,155
  • 37
  • 130
  • 231
  • 1
    Do you have a tag in you web.xml file ? http://stackoverflow.com/questions/855841/load-balance-web-application – Darius X. Apr 04 '16 at 19:28
  • Yes. I do. Thanks for chiming in ! What I really need is how to set up on the Windows side. Steps, commands, etc. – curious1 Apr 04 '16 at 23:21
  • The clustering itself (i.e. session replication) should be independent of the clustering. You say the load-balancer is working. Do you mean it is sending requests to the different Tomcat nodes, but if you bring one down it does not send it to one of the remaining three? – Darius X. Apr 05 '16 at 12:58
  • Yes, the load balancer is able to distribute web requests to different Tomcat nodes. However, if one node is down, a user is able to directed to one of remaining nodes. However the session information (such as user credentials info) is gone and a user has to start from the beginning. Basically I hope to know step-by-step instructions (such as multicast on Windows servers) about Tomcat clustering. Thanks! – curious1 Apr 05 '16 at 17:50
  • 1
    Assuming Tomcat has the authority to to broadcast on 228.0.0.4 and that the other nodes can receive it, you could experiment adding the "bind" attribute on the Membership tag (you can use the same IP address that Tomcat that's in the Tomcat connector). "bind" should not be required, but its worth a try. Also, when a Tomcat node starts up, it should discover other nodes in the cluster and log some messages. I'd check what it is saying. Also, using the Tomcat manager pages, you should be able to see sessions and check if you can see only local sessions, or all sessions. – Darius X. Apr 06 '16 at 14:03
  • 1
    Hi Darius, thanks for the tip. I did research and used this command: netsh interface ip show joins and I found this ip address: 224.0.0.252. I used it in Membership as the port number. It seems things are working (discover other members, messages such as member disappearance, etc.). I am now able to keep login credentials when the Tomcat I connected to is down. Though it is working, but I have no idea how it is working, what parameters I need to tune. – curious1 Apr 06 '16 at 18:25

0 Answers0