Tomcat session replication - different machines configuration

1.8k views Asked by At

If i want to create a cluster of 2 tomcats:

Tomcat1 - ip 111.111.111.111 Tomcat2 - ip 222.222.222.222

Where exactly the in the server.xml i should say that my cluster contains both of these ips? If you will take alook at my server.xml (which i copy pasted from the tutorial) it looks like this:

<?xml version='1.0' encoding='utf-8'?>

<Server port="8105" shutdown="SHUTDOWN">

<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="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />


<Engine name="Catalina" defaultHost="localhost">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
  <Manager className="org.apache.catalina.ha.session.BackupManager"
               expireSessionsOnShutdown="false"
               notifyListenersOnReplication="true"
               mapSendOptions="6"/>   
   </Cluster>

  <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 &quot;%r&quot; %s %b" />

    </Host>
   </Engine>
  </Service>
</Server>
1

There are 1 answers

0
Szymon Jednac On

Cluster nodes are discovered using UDP multicast by default, therefore an explicit host list is not required in this example.

If your target environment doesn't support UDP multicast, then you'll have to switch to static membership:

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

   <Manager className="org.apache.catalina.ha.session.DeltaManager"
            expireSessionsOnShutdown="false"
            notifyListenersOnReplication="true"/>

   <!-- Membership config (Tomcat1) -->
   <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <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"/>

            <!-- Setup static members below -->
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                <!-- Commented out on Tomcat1
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                        port="4100"
                        host="111.111.111.111"
                        domain="delta-static"
                        uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"
                />
                -->                    
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                        port="4100"
                        host="222.222.222.222"
                        domain="delta-static"
                        uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}"
                />
            </Interceptor>
   </Channel>

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

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