If you have multiple node and want to achieve session replication using jgroup cluster then please follow steps to achieve your goal.
Tomcat Node-I Configuration
S1: Create tcp.xml(under tomcat/conf directory) and place below content
Example
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:org:jgroups"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd"
>
<TCP bind_port="4110"/>
<TCPPING async_discovery="true" initial_hosts="${jgroups.tcpping.initial_hosts:NODE-I-IP-ONLY[4110],NODE-II-IP-ONLY[4110]}" port_range="0"/>
<MERGE3 min_interval="10000" max_interval="30000"/>
<FD_SOCK/>
<FD_ALL timeout="9000" interval="3000" />
<VERIFY_SUSPECT timeout="1500" />
<BARRIER />
<pbcast.NAKACK2 use_mcast_xmit="false" discard_delivered_msgs="true"/>
<UNICAST3 />
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="4M"/>
<pbcast.GMS print_local_addr="true" join_timeout="2000" view_bundling="true"/>
<UFC max_credits="2M" min_threshold="0.4"/>
<MFC max_credits="2M" min_threshold="0.4"/>
<FRAG2 frag_size="60K" />
<!--RSVP resend_interval="2000" timeout="10000"/-->
<pbcast.STATE_TRANSFER/>
</config>
S2: Update server.xml(under tomcat/conf directory) and add secure attribute into the connector tag as below
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" secure="true"/>
S3: Update server.xml(under tomcat/conf directory) and add jvmRoute attribute into the Engine tag as below
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
S4: Update server.xml(under tomcat/conf directory) and add Cluster tag inside Engine tag as below
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8" channelStartOptions = "3">
<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.StaticMembershipService">
<LocalMember className="org.apache.catalina.tribes.membership.StaticMember" uniqueId="{1,3,5,7,8,0,0,2,0,0,1,0,0,0,0,9}"/>
<Member className="org.apache.catalina.tribes.membership.StaticMember" port="4110" host="NODE-II-IP-ONLY" uniqueId="{9,3,5,7,8,0,0,2,0,0,1,0,0,0,0,1}" />
</Membership>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4110" autoBind="100" selectorTimeout="2000" 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.MessageDispatchInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
<Member className="org.apache.catalina.tribes.membership.StaticMember" port="4110" host="NODE-II-IP-ONLY" uniqueId="{9,3,5,7,8,0,0,2,0,0,1,0,0,0,0,1}" />
</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.ClusterSessionListener"/>
</Cluster>
-------
-------
</Engine>
S5: Update web.xml(under tomcat/conf and tomcat/webapps/ROOT/WEB-INF directory) and add distributable tag before web-app tag end.
<web-app>
----------
----------
<distributable/>
</web-app>
S6: Update portal-ext.properties(under liferay home directory) and add below additional props
cluster.link.enabled=true
cluster.link.channel.properties.control=${catalina.base}/conf/tcp.xml
cluster.link.channel.properties.transport.0=${catalina.base}/conf/tcp.xml
cluster.link.autodetect.address=${DB-HOST-URL}:${DB-PORT}
portlet.session.replicate.enabled=true
web.server.display.node=true
Note: please change db-host-url and port as per application DB
S7: Update setenv.sh or setenv.bat(under tomcat/bin directory) and modify as below
CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8 -Djgroups.bind_addr=NODE-I-IP-ONLY -Djgroups.tcpping.initial_hosts=NODE-I-IP-ONLY[4110],NODE-II-IP-ONLY[4110] -Djava.locale.providers=JRE,COMPAT,CLDR -Djava.net.preferIPv4Stack=true -Duser.timezone=GMT -server -Xms4096m -Xmx4096m -XX:MaxNewSize=1536m -XX:MaxMetaspaceSize=768m -XX:MetaspaceSize=768m -XX:NewSize=1536m -XX:SurvivorRatio=7"
S8: Now you can start tomcat first node server
Tomcat Node-II Configuration
Amazon AWS Tomcat Cluster + Session Replication
-----------------------------------NODE-I CONFIGURATION END-----------------------------------
Tomcat-II Configuration
----------------------
S1: Create tcp.xml(under tomcat/conf directory) and place below content
Example
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:org:jgroups"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups.xsd"
>
<TCP bind_port="4110"/>
<TCPPING async_discovery="true" initial_hosts="${jgroups.tcpping.initial_hosts:NODE-II-IP-ONLY[4110],NODE-I-IP-ONLY[4110]}" port_range="0"/>
<MERGE3 min_interval="10000" max_interval="30000"/>
<FD_SOCK/>
<FD_ALL timeout="9000" interval="3000" />
<VERIFY_SUSPECT timeout="1500" />
<BARRIER />
<pbcast.NAKACK2 use_mcast_xmit="false" discard_delivered_msgs="true"/>
<UNICAST3 />
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="4M"/>
<pbcast.GMS print_local_addr="true" join_timeout="2000" view_bundling="true"/>
<UFC max_credits="2M" min_threshold="0.4"/>
<MFC max_credits="2M" min_threshold="0.4"/>
<FRAG2 frag_size="60K" />
<!--RSVP resend_interval="2000" timeout="10000"/-->
<pbcast.STATE_TRANSFER/>
</config>
S2: Update server.xml(under tomcat/conf directory) and add secure attribute into the connector tag as below
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" secure="true"/>
S3: Update server.xml(under tomcat/conf directory) and add jvmRoute attribute into the Engine tag as below
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node2">
S4: Update server.xml(under tomcat/conf directory) and add Cluster tag inside Engine tag as below
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8" channelStartOptions = "3">
<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.StaticMembershipService">
<LocalMember className="org.apache.catalina.tribes.membership.StaticMember" uniqueId="{9,3,5,7,8,0,0,2,0,0,1,0,0,0,0,1}"/>
<Member className="org.apache.catalina.tribes.membership.StaticMember" port="4110" host="NODE-I-IP-ONLY" uniqueId="{1,3,5,7,8,0,0,2,0,0,1,0,0,0,0,9}" />
</Membership>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4110" autoBind="100" selectorTimeout="2000" 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.MessageDispatchInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
<Member className="org.apache.catalina.tribes.membership.StaticMember" port="4110" host="NODE-I-IP-ONLY" uniqueId="{1,3,5,7,8,0,0,2,0,0,1,0,0,0,0,9}" />
</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.ClusterSessionListener"/>
</Cluster>
-------
-------
</Engine>
S5: Update web.xml(under tomcat/conf and tomcat/webapps/ROOT/WEB-INF directory) and add distributable tag before web-app tag end.
<web-app>
----------
----------
<distributable/>
</web-app>
S6: Update portal-ext.properties(under liferay home directory) and add below additional props
cluster.link.enabled=true
cluster.link.channel.properties.control=${catalina.base}/conf/tcp.xml
cluster.link.channel.properties.transport.0=${catalina.base}/conf/tcp.xml
cluster.link.autodetect.address=${DB-HOST-URL}:${DB-PORT}
portlet.session.replicate.enabled=true
web.server.display.node=true
Note: please change db-host-url and port as per application DB
S7: Update setenv.sh/setenv.bat (under tomcat/bin directory) and modify as below
CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8 -Djgroups.bind_addr=NODE-II-IP-ONLY -Djgroups.tcpping.initial_hosts=NODE-II-IP-ONLY[4110],NODE-I-IP-ONLY[4110] -Djava.locale.providers=JRE,COMPAT,CLDR -Djava.net.preferIPv4Stack=true -Duser.timezone=GMT -server -Xms4096m -Xmx4096m -XX:MaxNewSize=1536m -XX:MaxMetaspaceSize=768m -XX:MetaspaceSize=768m -XX:NewSize=1536m -XX:SurvivorRatio=7"
S8: Now you can start tomcat second node server
-----------------------------------NODE-II CONFIGURATION END-----------------------------------


