用Tomcat内置的Session复制方案实现Tomcat集群Session共享

Posted Java学习网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Tomcat内置的Session复制方案实现Tomcat集群Session共享相关的知识,希望对你有一定的参考价值。

实现过程


第1步

修改tomcat的server.xml文件,在 节点下,添加以下内容:

<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.0.4"

                    port="45564"frequency="500" dropTime="3000" />

        <!-- 这里如果启动出现异常,则可以尝试把address中的"auto"改为"localhost" -->

        <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"address="auto" 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.MessageDispatchInterceptor"/>

    </Channel>

    <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>

    <Valve className="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>

1234567891011121314151617181920

 


 

第2步

在项目的web.xml中添加如下节点:

<distributable/>


优缺点

 

优点

Java代码上不需要做任何修改


缺点

依赖应用服务器容器,这里是Tomcat,其他的容器是使用不了的;

适合小集群,不适合大集群,因为Session的复制是 all toall的,每个Tomcat都会存储其他的Session,会造成很大的资源浪费;

在高并发的情况下延迟较为严重且占用网络资源。


以上是关于用Tomcat内置的Session复制方案实现Tomcat集群Session共享的主要内容,如果未能解决你的问题,请参考以下文章

tomcat session会话复制

CentOS 7 nginx+tomcat+redis session处理方案之session复制

Tomcat自带的Session共享方案实施记录

使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享

nginx+tomcat集群负载均衡(实现session复制)

使用redis实现session复制