Tomcat集群中实现session共享

Tomcat集群中实现session共享,会话保持

Tomcat自带的session cluster方式可以实现会话共享。
tomcat自带的cluster是基于多播传递以及时间同步的方式,使用session cluster,可以将本地的session复制传递给集群中的其它服务器,多个tomcat间自动实时复制session信息,从而实现session保持。

一、编辑测试页面,返回会话id

Tomcat LB集群搭建参考《Tomcat LB 负载均衡集群实现》

链接:https://blog.csdn.net/field_yang/article/details/80698498

[root@test conf]# cd  /data/webapps/ROOT/

[root@test ROOT]# vim  index.jsp

[root@test ROOT]# more  index.jsp

<%@ page language="java" %>

<html>

  <head><title>Tomcat1</title></head>

 <body>

   <h1><fontcolor="blue">test.field.com/Tomcat1</font></h1>

   <table align="centre" border="1">

     <tr>

       <td>Session ID</td>

   <%session.setAttribute("test.field.com","test.field.com");%>

        <td><%= session.getId()%></td>

     </tr>

     <tr>

       <td>Created on</td>

       <td><%= session.getCreationTime() %></td>

    </tr>

   </table>

 </body>

</html>

[root@www ROOT]# cd  /data/webapps/ROOT/

[root@www ROOT]# vim  index.jsp

[root@www ROOT]# more  index.jsp

<%@ page language="java" %>

<html>

 <head><title>Tomcat2</title></head>

 <body>

   <h1><fontcolor="blue">web1.field.com/Tomcat2</font></h1>

   <table align="centre" border="1">

     <tr>

       <td>Session ID</td>

    <%session.setAttribute("web1.field.com","web1.field.com");%>

       <td><%= session.getId() %></td>

     </tr>

     <tr>

       <td>Created on</td>

       <td><%= session.getCreationTime() %></td>

    </tr>

   </table>

 </body>

</html>

访问:http://192.168.88.132/index.jsp,刷新,每次返回的session都不一样,如图为在Google四次刷新。

web1.field.com/Tomcat2

Session ID         B5303B4675D513BB409F0824AFEF4121

Created on       1528978355101

test.field.com/Tomcat1

Session ID         4FF2A9DF3CEE3E70AE8464573E9A5C1A

Created on       1528978640933

test.field.com/Tomcat1

Session ID         C1D5F6FA4B7DD09C78FE07A7F7C60806

Created on       1528978657213

web1.field.com/Tomcat2

Session ID         3CDB193E556D9766D0F5A5F01B1A598C

Created on       1528978669299

二、添加session共享

添加session共享只需两步

1、编辑server.xml

在<Host name="test.field.com"appBase="/data/webapps" unpackWARs="true"autoDeploy="false">

行下面添加<Cluster ...> ...         </Cluster>之间的内容。

此段代码及用法可以从Tomcat官方文档获取《https://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html》

此处只需修改:

多播地址:address="228.0.1.8"

服务器地址:address="auto"address="192.168.88.130"

1)、Tomcat1修改

[root@test conf]# vim  server.xml

     <Host name="test.field.com"appBase="/data/webapps" unpackWARs="true"autoDeploy="false">

         <ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"

                   channelSendOptions="8">

         <ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

                   expireSessionsOnShutdown="false"

                   notifyListenersOnReplication="true"/>

         <ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">

     <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

              address="228.0.1.8"

               port="45564"

               frequency="500"

               dropTime="3000"/>

         <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

              address="192.168.88.130"

               port="4000"

               autoBind="100"

               selectorTimeout="5000"

                 maxThreads="6"/>

         <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

         <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

         </Sender>

         <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

         <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

         </Channel>

         <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

                   filter=""/>

         <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

 

         <DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

                   tempDir="/tmp/war-temp/"

                   deployDir="/tmp/war-deploy/"

                   watchDir="/tmp/war-listen/"

         watchEnabled="false"/>

         <ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

         </Cluster> 

2)、Tomcat2修改

[root@www conf]# vim  server.xml

     <Host name="web1.field.com"appBase="/data/webapps" unpackWARs="true"autoDeploy="true">

<ClusterclassName="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="8">

<Manager className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdown="false"

notifyListenersOnReplication="true"/>

<ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">

  <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

   address="228.0.1.8"

  port="45564"

  frequency="500"

  dropTime="3000"/>

  <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

   address="192.168.88.131"

  port="4000"

  autoBind="100"

  selectorTimeout="5000"

  maxThreads="6"/>

<SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">

<TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

</Sender>

<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>

<InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

</Channel>

<ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

<ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-temp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-listen/"

watchEnabled="false"/>

<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster> 

3)、两台机上检查Tomcat语法:catalina.shconfigtest

[root@www conf]#catalina.sh  configtest

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR:/usr/local/tomcat/temp

Using JRE_HOME:        /usr/java/latest

Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server version:       Apache Tomcat/8.0.47

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server built:          Sep29 2017 13:46:41 UTC

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Server number:        8.0.47.0

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Name:               Linux

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: OS Version:           2.6.32-279.el6.x86_64

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Architecture:          amd64

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Java Home:             /usr/java/jdk1.8.0_151/jre

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Version:          1.8.0_151-b12

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: JVM Vendor:            OracleCorporation

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_BASE:        /usr/local/apache-tomcat-8.0.47

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: CATALINA_HOME:         /usr/local/apache-tomcat-8.0.47

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Djdk.tls.ephemeralDHKeySize=2048

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.protocol.handler.pkgs=org.apache.catalina.webresources

六月14, 2018 8:31:37 下午org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument:-Djava.endorsed.dirs=/usr/local/tomcat/endorsed

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dcatalina.base=/usr/local/tomcat

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Dcatalina.home=/usr/local/tomcat

六月 14, 2018 8:31:37 下午 org.apache.catalina.startup.VersionLoggerListener log

信息: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp

六月 14, 2018 8:31:37 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent

信息: The APR based Apache Tomcat Native library which allows optimalperformance in production environments was not found on the java.library.path:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib

六月 14, 2018 8:31:37 下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["http-nio-8080"]

六月 14, 2018 8:31:38 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector

信息: Using a shared selector for servlet write/read

六月 14, 2018 8:31:38 下午 org.apache.coyote.AbstractProtocol init

信息: Initializing ProtocolHandler ["ajp-nio-8009"]

六月 14, 2018 8:31:38 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector

信息: Using a shared selector for servlet write/read

六月 14, 2018 8:31:38 下午 org.apache.catalina.startup.Catalina load

信息: Initialization processed in 1072 ms

[root@test conf]# catalina.sh configtest

2、确保web.xml有 <distributable/>条目

[root@test conf]# cp  web.xml  /data/webapps/ROOT/WEB-INF/

[root@test conf]# vim  /data/webapps/ROOT/WEB-INF/web.xml

 <distributable/>

[root@test conf]# scp  /data/webapps/ROOT/WEB-INF/web.xml   192.168.88.131:/data/webapps/ROOT/WEB-INF/

The authenticity of host '192.168.88.131(192.168.88.131)' can't be established.

RSA key fingerprint isda:52:ca:c5:e6:c5:3a:de:5d:bc:07:ed:86:e6:ac:44.

Are you sure you want to continueconnecting (yes/no)? yes

Warning: Permanently added '192.168.88.131'(RSA) to the list of known hosts.

root@192.168.88.131's password:

web.xml                                                                                                                                                     100%  166KB 165.7KB/s   00:00   

[root@test conf]# tail  /data/webapps/ROOT/WEB-INF/web.xml

 <!-- here, so be sure to include any of the default values that youwish  -->

 <!-- to use within your application.    -->

   <welcome-file-list>

       <welcome-file>index.html</welcome-file>

       <welcome-file>index.htm</welcome-file>

       <welcome-file>index.jsp</welcome-file>

   </welcome-file-list>

 <distributable/>

</web-app>

3、启动服务器,观察日志

1)、Tomcat1

[root@test conf.d]# catalina.sh  start

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR:/usr/local/tomcat/temp

Using JRE_HOME:        /usr/java/latest

Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Tomcat started.

[root@test conf]# tail/usr/local/tomcat/logs/catalina.out

14-Jun-2018 20:38:27.369 信息 [test.field.com-startStop-1] org.apache.catalina.ha.session.DeltaManager.getAllClusterSessionsManager [], requesting session state fromorg.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 88,131}:4000,{192, 168, 88, 131},4000, alive=9026, securePort=-1, UDP Port=-1,id={91 -111 2 57 -68 -75 73 -115 -111 9 7 -65 -4 118 -5 -49 }, payload={},command={}, domain={}, ]. This operation will timeout if no session state hasbeen received within 60 seconds.

14-Jun-2018 20:38:27.573 信息[test.field.com-startStop-1] org.apache.catalina.ha.session.DeltaManager.waitForSendAllSessionsManager []; session state send at 6/14/18 8:38 PM received in 212 ms.

14-Jun-2018 20:38:27.609 信息[Catalina-startStop-1]org.apache.catalina.ha.session.JvmRouteBinderValve.startInternalJvmRouteBinderValve started

14-Jun-2018 20:38:27.611 信息[test.field.com-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectory Deploying webapplication directory /data/webapps/classes

14-Jun-2018 20:38:27.647 信息[test.field.com-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectoryDeployment of web application directory /data/webapps/classes has finished in37 ms

14-Jun-2018 20:38:27.647 信息[test.field.com-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectory Deploying webapplication directory /data/webapps/lib

14-Jun-2018 20:38:27.663 信息[test.field.com-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectory Deployment of webapplication directory /data/webapps/lib has finished in 16 ms

14-Jun-2018 20:38:27.682 信息 [main]org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["http-nio-8080"]

14-Jun-2018 20:38:27.699 信息 [main]org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["ajp-nio-8009"]

14-Jun-2018 20:38:27.709 信息 [main]org.apache.catalina.startup.Catalina.start Server startup in 3453 ms

1)、Tomcat2

[root@www conf]# catalina.sh start

Using CATALINA_BASE:   /usr/local/tomcat

Using CATALINA_HOME:   /usr/local/tomcat

Using CATALINA_TMPDIR:/usr/local/tomcat/temp

Using JRE_HOME:        /usr/java/latest

Using CLASSPATH:      /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Tomcat started.

[root@www ROOT]# tail  /usr/local/tomcat/logs/catalina.out

14-Jun-2018 20:38:20.395 信息[web1.field.com-startStop-1] org.apache.catalina.ha.session.DeltaManager.startInternalStarting clustering manager at

14-Jun-2018 20:38:20.395 信息[web1.field.com-startStop-1]org.apache.catalina.ha.session.DeltaManager.getAllClusterSessions Manager []:skipping state transfer. No members active in cluster group.

14-Jun-2018 20:38:20.397 信息[Catalina-startStop-1]org.apache.catalina.ha.session.JvmRouteBinderValve.startInternalJvmRouteBinderValve started

14-Jun-2018 20:38:20.398 信息[web1.field.com-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectory Deploying webapplication directory /data/webapps/shopxx

14-Jun-2018 20:38:20.442 信息[web1.field.com-startStop-1]org.apache.catalina.startup.HostConfig.deployDirectory Deployment of webapplication directory /data/webapps/shopxx has finished in 44 ms

14-Jun-2018 20:38:20.456 信息 [main]org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["http-nio-8080"]

14-Jun-2018 20:38:20.503 信息 [main]org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler["ajp-nio-8009"]

14-Jun-2018 20:38:20.515 信息 [main]org.apache.catalina.startup.Catalina.start Server startup in 4204 ms

14-Jun-2018 20:38:25.941 信息[Tribes-Task-Receiver[web1.field.com-Channel]-1]org.apache.catalina.tribes.io.BufferPool.getBufferPool Created a buffer poolwith max size:104857600 bytes of type:org.apache.catalina.tribes.io.BufferPool15Impl

14-Jun-2018 20:38:26.319 信息 [Membership-MemberAdded.]org.apache.catalina.ha.tcp.SimpleTcpCluster.memberAdded Replication memberadded:org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 88,130}:4000,{192, 168, 88, 130},4000, alive=1036, securePort=-1, UDP Port=-1,id={-45 -58 90 97 -125 119 71 77 -116 -45 98 31 -63 48 31 -101 }, payload={},command={}, domain={}, ]

[root@www ROOT]#

[Membership-MemberAdded.]可以看到已经成功开启会话共享成功

三、测试会话共享

访问http://192.168.88.132/index.jsp,刷新,可以发现,session保持不变

如图为分别在Firefox和Google浏览器实现会话保持

test.field.com/Tomcat1

Session ID         ACDD83C17831B6204D74E39859D2F3FB

Created on       1528980076240

web1.field.com/Tomcat2

Session ID         ACDD83C17831B6204D74E39859D2F3FB

Created on       1528980076240

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值