tomcat集群多节点实现session共享

来源:互联网 发布:守望 网络初始化错误 编辑:程序博客网 时间:2024/06/05 17:59

  对于高访问量、高并发量的网站或web应用来说,目前最常见的解决方案应该就是利用负载均衡进行server集群,集群之后比如我们有N个节点的Tomcat,用户在访问我们的网站时有可能第一次请求分发到tomcat1下,而第二次请求又分发到了tomcat2下,web分发到不同的服务器节点,这时session不一致,所以我们需要解决一下多个tomcat之间session共享的问题。

环境由tomcat7进行配置,准备一个Java的test.war进行session贡献测试,只是一个页面展示包已上传至http://download.csdn.net/detail/xiaoyi23000/9859455

      1、在java程序中将web.xml文件中增加<distributable/>标签,如下所示:

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>test</display-name>  <distributable/>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

2、每个tomcat下conf文件夹下的context.xml文件,将<context>改为<Context distributable="true">

<Context distributable="true">

     3、每个tomcat下conf文件夹下的server.xml文件的<Engine name="Catalina" defaultHost="localhost"> 行下添加如下内容:

<Engine name="Catalina" defaultHost="localhost">           <!--tomcat的session配置--><Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"                 channelSendOptions="6">           <Manager className="org.apache.catalina.ha.session.BackupManager"                   expireSessionsOnShutdown="false"                   notifyListenersOnReplication="true"                   mapSendOptions="6"/>                        <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"                      selectorTimeout="100"                      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"/>            <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>          </Channel>           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"                 filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>           <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>

4、分别启动每个tomcat通过浏览器进行测试即可。


参考如下博客和论坛:

http://bbs.csdn.net/topics/310082939
http://blog.csdn.net/wlwlwlwl015/article/details/48160433




原创粉丝点击