tomcat8的session共享实现方案

Posted 噢咦嗒的博客

tags:

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

tomcat8的session共享实现

下载tomcat

版本:apache-tomcat-8.0.53.zip

实现步骤,只需要两步

  1. 两个tomcat的server.xml都增加一样cluster配置
    <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>
  1. 两个tomcat的应用的web.xml下都增加

比如在:
/Users/Library/Tomcat/apache-tomcat-8.0.53-8081/webapps/ROOT/WEB-INF/web.xml
增加:

    <distributable/>
  1. 然后重启两台tomcat即可

新建jsp测试

session.jsp

<html>
<head>
<title>test2</title>
</head>
<body>
    SessionID is
    <%=session.getId()%>
    <BR> SessionIP is
    <%=request.getServerName()%>
    <BR> SessionPort is
    <%=request.getServerPort()%>
    <%
        out.println("Response from tomcat2");
    %>
</body>
</html>

比如放置在:
/Users/Library/Tomcat/apache-tomcat-8.0.53-8082/webapps/ROOT/session.jsp
另一台一样。

访问:
http://localhost:8081/session.jsp
http://localhost:8082/session.jsp

sessionid一致:

SessionID is 6E5D26E07FDE6FB5D01A59F457D64333 
SessionIP is tomcat.chinaunicom.tech 
SessionPort is 80 Response from tomcat1

SessionID is 6E5D26E07FDE6FB5D01A59F457D64333 
SessionIP is tomcat.chinaunicom.tech 
SessionPort is 80 Response from tomcat2

注意事项

  1. 需要使用tomcat8版本(上述测试在8.0.53上通过)。如果需要tomcat7,需要修改配置
  2. 不要漏了distributable的配置,漏了session也不能共享
  3. 这种方案只适用于并发量较少的应用,并发量大需使用redis等方案

参考官网:
http://localhost:8082/docs/cluster-howto.html
http://tomcat.apache.org/tomcat-8.0-doc/config/cluster.html
翻译:
http://wiki.jikexueyuan.com/project/tomcat/clustering.html











以上是关于tomcat8的session共享实现方案的主要内容,如果未能解决你的问题,请参考以下文章

nginx+tomcat8+memcached实现session共享

Tomcat8+Redis+Nginx实现集群

tomcat8.0.33 msm session共享

Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

实战案例 : Tomcat8 利用memcached1.5实现会话Cluster (同一主机sticky 模式)

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