美文网首页
Tomcat的session(组播)复制共享

Tomcat的session(组播)复制共享

作者: 宇宙小神特别萌 | 来源:发表于2019-01-11 14:15 被阅读18次

    Window下同一台服务器部署多个tomcat服务

    本文使用tomcat 8.0压缩版进行部署。

    · 工具

    apache-tomcat-8.0.30

    1.安装tomcat步骤

    ​ 1. 下载apache-tomcat-8.0.30 ,下载下来的文件为apache-tomcat-8.0.30-windows-x64.zip

    ​ 2. 解压该压缩包到D:/目录下。

    ​ 3. 修改解压文件夹名字为:tomcat-8080

    ​ 4. 在D:/目录下创建该文件夹的两个副本,分别更名为:tomcat-8081、tomcat-8082

    ​ 5. 添加环境变量:右键单击我的电脑->选择属性->选择高级->选择环境变量:添加系统变量:
    ​ CATALINA_HOME_8080,其值为:D:\tomcat-8080;
    ​ CATALINA_HOME_8081,其值为:D:\tomcat-8081;
    ​ CATALINA_HOME_8082,其值为:D:\tomcat-8082;

    ​ 6. 修改启动端口和关闭端口:

    ​ 进入D:\tomcat-8081\conf\目录,打开server.xml文件,修改下面两个地方:

    ​ (1)<Server port="8006" shutdown="SHUTDOWN">
    ​ 修改这个port=”8006”,使得它的关闭端口和另一个关闭端口不发生冲突。

    ​ (2)<Connector port="8081" maxHttpHeaderSize="8192"
    ​ maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    ​ enableLookups="false" redirectPort="8443" acceptCount="100"
    ​ connectionTimeout="20000" disableUploadTimeout="true" />

    ​ 修改port=”8081”,使得它的连接端口和另一个不冲突。

    ​ (3)<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    ​ 修改这个port=”8010”,使得它的AJP端口和另一个不冲突。

    ​ 7. 修改startup.bat、shutdown.bat和catalina.bat文件内容:
    ​ (1) 打开D:\tomcat-8081\bin\startup.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。
    ​ (2) 打开D:\tomcat-8081\bin\shutdown.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。
    ​ (3) 打开D:\tomcat-8081\bin\catalina.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。

    ​ 9.按照上述方法配置tomcat-8080 ,tomcat-8082。

    ​ 10.启动Tomcat,在命令行下分别进入三个不同的Tomcat安装目录下,执行startup.bat,分别启动三个Tomcat。然后在浏览器中输入以下内容,如果显示tomcat主页,则部署成功:
         http://localhost:8080
         http://localhost:8081
         http://localhost:8082

    2.将tomcat配置成服务

    ​ 1.进入tomcat-8080/bin目录,修改 service.bat,找到以下内容,修改SERVICE_NAME为自定义的服务名

    ​ rem Set default Service name
    ​ set SERVICE_NAME=tomcat8080
    ​ set DISPLAYNAME=Apache Tomcat 8.0 %SERVICE_NAME%

    ​ 2.在service.bat中搜索CATALINA_HOME,并全部替换为CATALINA_HOME_8080(与环境变量名保持一致)

    ​ 3.在tomcat-8080/bin目录下,找到tomcat8.exe和tomcat8w.exe,重命名为SERVICE_NAME配置的名字一致,这里重命名为tomcat8080.exe和tomcat8080w.exe

    ​ 4.使用命令行进入tomcat-8080/bin,执行service.bat install

    ​ 5.使用win+r输入services.msc进入服务界面,找到DISPLAYNAME对应的服务名(即Apache Tomcat 8.0 tomcat8080),右键选择“属性”菜单,在“常规”选项卡选择“启动类型”为“自动”,或者进入tomcat-8080/bin目录 ,双击tomcat8080w.exe,在弹出的界面选中General选项卡,选择Startup type为Automatic,即开机自启动

    tomcat服务启动

    · 至此,我们已经在一台服务器上配置了三个Tomcat。

    3.配置tomcat集群session复制共享

    一般来说做nginx负载均衡,会用到。
    现在用tomcat8081、8082做session复制:分别配置这两个tomcat的server.xml。

    找到tomcat安装路径,打开conf文件夹下的server.xml
    在此句下方<Engine name="Catalina" defaultHost="localhost">粘贴进去以下内容,内容一般不用修改

    
        <!--##################start配置tomcat集群8082、8083######################-->
        <!-- 用于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"/>
                <!--这里如果启动出现异常,则可以尝试把address中的"auto"改为"localhost"-->
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                          address="localhost"
                          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>
            <!--address="228.0.0.4"  保留ip,用于广播-->
            <!--Receiver.port=4000  在一台电脑上部署两个tomcat做负载均衡,此端口不能相同 -->
            <!-- 第2步:在web.xml中添加如下节点 -->
            <!-- 用于Session复制 -->
            <!-- <distributable/> -->
    
    <!--#########################end配置tomcat集群######################-->
    
    

    4.创建一个spring的web项目

    将这个项目放别放到tomcat8081、8082中

    index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
        <base href="<%=basePath%>">
    
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    </head>
    
    <body>
    
    SessionID:<%=session.getId()%>
    <BR>
    SessionIP:<%=request.getServerName()%>
    <BR>
    SessionPort:<%=request.getServerPort()%>
    <BR>
    <h1>这是aaaaa</h1>
    </body>
    </html>
    

    或者写个session创建的监听类

    MySessionListener.java

    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    public class MySessionListener implements HttpSessionListener {
    
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {
           //MySessionContext.AddSession(httpSessionEvent.getSession());
           //当有session创建就会打印
            System.out.println("sessionidall:===="+httpSessionEvent.getSession().getId());
        }
    
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    //        HttpSession session = httpSessionEvent.getSession();
           // MySessionContext.DelSession(session);
        }
    }
    

    项目中web.xml里配置:<distributable/> 标签:session复制

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <distributable/>
        <listener>
            <listener-class>MySessionListener</listener-class>
        </listener>
    </web-app>
    

    将这个spring项目放在tomcat8081、8082中,分别启动tomcat8081和tomcat8082.
    访问http://localhost:8081/sessiontest/index.jsphttp://localhost:8082/sessiontest/index.jsp
    看到的sessionId是一样的就OK了。

    相关文章

      网友评论

          本文标题:Tomcat的session(组播)复制共享

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