Tomcat集群的session复制配置

Posted 棒冰

tags:

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

  此处我们采用的是在一台服务器上配置3台Tomcat,为了达到访问任何一台Tomcat都共享session的目的,我们这里采用Tomcat在集群中的session复制,以下是具体的配置

  1、我们将Tomcat复制3份,更改名字为Tomcat1、Tomcat2、Tomcat3,修改每个Tomcat中的Server节点端口分别为8005、8006、8007

1 #Tomcat1
2 <Server port="8005" shutdown="SHUTDOWN">
3 #Tomcat2
4 <Server port="8006" shutdown="SHUTDOWN">
5 #Tomcat3
6 <Server port="8007" shutdown="SHUTDOWN">

  2、修改每个Tomcat的http监听端口为8080、8081、8082,因为是在同一台服务器上,HTTPS的端口也要变,这里我们设置为8443、8444、8445

 1 #Tomcat1
 2 <Connector port="8080" protocol="HTTP/1.1"
 3              connectionTimeout="20000"
 4              redirectPort="8443" />
 5 #Tomcat2
 6 <Connector port="8081" protocol="HTTP/1.1"
 7              connectionTimeout="20000"
 8              redirectPort="8444" />
 9 #Tomcat3
10 <Connector port="8082" protocol="HTTP/1.1"
11              connectionTimeout="20000"
12              redirectPort="8445" />

  3、为了实现集群下的session复制,我们需要打开位于<Engine>节点下的集群配置节点<Cluster>

1 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

  4、该配置就能够满足一般的要求,这个配置是一个简化的配置,相当于以下的配置,具体的详情可以参见Tomcat集群Cluster实现原理剖析(session复制实现方式)

<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.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster> 

 

以上是关于Tomcat集群的session复制配置的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Tomcat集群session复制,httpd/nginx反代Tomcat集群

Apache和Tomcat 配置负载均衡(mod-proxy方式)-粘性session

tomcat session会话复制

#IT明星不是梦#nginx+tomcat集群redis共享session方案实战案例