linux

Tomcat会话集群-基于session复制的搭建

发布时间:9年前热度: 4061 ℃评论数:

1、将下例的cluster组件定义添加在每个tomcat实例配置文件server.xml的engine或host组件中; 


<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>
 
11.png

2、为支持使用“分布式会话”功能的webapp的配置文件web.xml添加<distributable /> 
12.png 

3、添加多播地址路由 
route add -net 228.0.0.4 netmask 255.255.255.255 dev eno16777736 
4、将上述操作在需要实现session保持的tomcat节点执行,执行完毕准备测试页面,进行测试操作。 
    本次测试采用两个节点:TomcatA、TomcatB 
    TomcatA测试页面: 
<%@ page language="java" %> 
<html> 
 <head><title>TomcatA</title></head> 
 <body> 
   <h1><font color="red">TomcatA </font></h1> 
   <table align="centre" border="1"> 
     <tr> 
       <td>Session ID</td> 
   <% session.setAttribute("abc","abc"); %> 
       <td><%= session.getId() %></td> 
     </tr> 
     <tr> 
       <td>Created on</td> 
       <td><%= session.getCreationTime() %></td> 
    </tr> 
   </table> 
 </body> 
</html>
 
    TomcatB测试页面: 
<%@ page language="java" %> 
    <html> 
   <head><title>TomcatB</title></head> 
   <body> 
   <h1><font color="blue">TomcatB </font></h1> 
   <table align="centre" border="1"> 
     <tr> 
       <td>Session ID</td> 
   <% session.setAttribute("abc","abc"); %> 
       <td><%= session.getId() %></td> 
     </tr> 
     <tr> 
       <td>Created on</td> 
       <td><%= session.getCreationTime() %></td> 
     </tr> 
    </table> 
  </body> 
</html>
 
5、测试 

13.png                              14.png

6、注意细节 
(1) Receiver组件的address有可能需要手动指定为当前主机上某地址; 
(2) 多播地址尽量别使用默认; 
(3)节点间的时间要同步; 
(4)memcached 
https://code.google.com/archive/p/memcached-session-manager/wikis/SetupAndConfiguration.wiki

会话,集群,基于,复制,搭建

手机扫码访问