美文网首页
session 共享-tomcat集群session复制

session 共享-tomcat集群session复制

作者: lmandy | 来源:发表于2017-06-16 14:17 被阅读0次

一.环境准备(windows下nginx+tomcat,linux同理)

1.nginx一台

2.tomcat 2台(端口号不同,我这里是8081和8082)

3.web项目一个(我这里项目名tomcat-session)

二.详细配置

1.nginx

在nginx的conf文件下找到nginx.conf将以下位置改成

image.png
2.tomcat

在tomcat的conf文件夹下找到server.xml配置文件进行端口配置(此处2台tomcat 分别是8081和8082)和集群配置。

找到Engine标签

image.png

在下面添加如下代码

image.png
<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>
3.web项目(tomcat-session)

3.1在2台tomcat web项目的web.xml中加入此属性


image.png

3.2在2台tomcat web项目中index.jsp页面中加入如下代码

项目1:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() +"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <title>111</title>
  </head>
  <body>
  SessionID:<%=session.getId()%>
  <BR>
  SessionIP:<%=request.getServerName()%>
  <BR>
  SessionPort:<%=request.getServerPort()%>
  <%
    out.println("This is Tomcat Server 1111");
  %>
  </body>
</html>

项目2:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() +"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    <title>111</title>
  </head>
  <body>
  SessionID:<%=session.getId()%>
  <BR>
  SessionIP:<%=request.getServerName()%>
  <BR>
  SessionPort:<%=request.getServerPort()%>
  <%
    out.println("This is Tomcat Server 2222");
  %>
  </body>
</html>

3.3 添加虚拟路径(此处注意必须要加,因为在ngnix中配置轮训时是通过ip+端口号访问的)


image.png

三.开始访问

使用nginx配置中的server_name 端口号默认80进行访问即:localhost

项目1:
image.png
项目2
image.png

从图中可以看出项目1和项目2的sessionID是相同的,因此tomcat的session复制到此完成。

四.参考文章

http://blog.csdn.net/fengwind1/article/details/52163096
http://blog.csdn.net/kkgbn/article/details/52192218

相关文章

网友评论

      本文标题:session 共享-tomcat集群session复制

      本文链接:https://www.haomeiwen.com/subject/ngwpqxtx.html