精华内容
下载资源
问答
  • tomcat的session复制

    千次阅读 2018-05-12 19:56:42
    用tomcat做负载集群时, 经常会用到session复制(Session Replication), 很多例子会告诉我们要配置apache或者...1.tomcat的session复制分为两种, 一种是全局试的(all-to-all), 这意味着一个node(tomcat实例)的sessi...

    用tomcat做负载集群时, 经常会用到session复制(Session Replication), 很多例子会告诉我们要配置apache或者其他的Web Server.。而事实上, 单纯从session复制的角度讲, 是不需要Web Server的。
    1.tomcat的session复制分为两种, 一种是全局试的(all-to-all), 这意味着一个node(tomcat实例)的session发生变化之后, 它会将这些变更复制到其他所有集群组的成员;另一种是局部试的, 它会用到BackupManager, BackupManager能实现只复制给一个Buckup Node, 并且这个Node会部署相同的Web应用, 但是这种方式并没用经过很多的测试(来自官方说明..)。
    2.tomcat的session复制是基于IP组播(multicast)来完成的, 详细的IP组播介绍可以参考这里.
    简单的说就是需要进行集群的tomcat通过配置统一的组播IP和端口来确定一个集群组, 当一个node的session发生变更的时候, 它会向IP组播发送变更的数据, IP组播会将数据分发给所有组里的其他成员(node)。

    配置如下(这里所有的tomcat都在不同的物理主机, 如果在同一台主机上需要改tomcat的tcpListenPort)

        <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>  
    

    然后新建一个web应用, 我们这里叫TomcatClusterDemo, web context与名称一致.
    新建一个jsp, 这个jsp复制向session里创建/更新属性, 并将session里的所有属性显示在网页上.
    当然, 为了验证我们的session是同步的, 我们还将session ID显示了出来, 代码如下:

        <%@ page contentType="text/html; charset=UTF-8" %>  
        <%@ page import="java.util.*" %>  
        <html><head><title>Tomcat Cluster Demo</title></head>  
        <body>  
        Server Info:  
        <%  
        out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>  
        <%  
          out.println("<br> ID " + session.getId()+"<br>");  
    
          String dataName = request.getParameter("dataName");  
          if (dataName != null && dataName.length() > 0) {  
             String dataValue = request.getParameter("dataValue");  
             session.setAttribute(dataName, dataValue);  
             System.out.println("application:" + application.getAttribute(dataName));  
             application.setAttribute(dataName, dataValue);  
          }  
          out.print("<b>Session List</b>");  
          Enumeration<String> e = session.getAttributeNames();  
          while (e.hasMoreElements()) {  
             String name = e.nextElement();  
             String value = session.getAttribute(name).toString();  
             out.println( name + " = " + value+"<br>");  
                 System.out.println( name + " = " + value);  
           }  
        %>  
          <form action="test.jsp" method="POST">  
            Name:<input type=text size=20 name="dataName">  
             <br>  
            Value:<input type=text size=20 name="dataValue">  
             <br>  
            <input type=submit>  
           </form>  
        </body>  
        </html> 

    同时, 在web.xml里增加描述

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

    现在将TomcatClusterDemo部署到两个tomcat上(直接将war包或者部署文件拷贝到webapps下, 或者通过Tomcat Web Application Manager部署), 依次启动两个tomcat.
    先访问第一台tomcat(下面的9.119.84.68)的test.jsp, 并添加几个session.
    然后访问第二台tomcat(下面的9.119.84.88)的test.jsp, 为了告诉tomcat我们要用那个session访问, 我们需要在URL后面加上 ;jsessionid=SESSION_ID
    SESSION_ID可以从第一个test.jsp页面上获得.两个在不同server上的tomcat实现了session复制!

    展开全文
  • session复制集群配置 1、服务器时间同步 2、多播通信,相同多播端口为同一组,单播传输增量session 3、web.xml的 <...实验目的:tomcat1和tomcat2的sessionID一致 NGINX配置 http { upstream tomcats { #ip

    session复制集群配置

    1、服务器时间同步
    2、多播通信,相同多播端口为同一组,单播传输增量session
    3、web.xml的 <web-app> 标签增加子标签 <distributable/> 来开启集群

    环境搭建

    1. 使用NGINX服务器做反向代理服务器
    2. 配置两台Tomcat服务器10.0.0.8和10.0.0.18

    实验目的:tomcat1和tomcat2的sessionID一致
    在这里插入图片描述

    NGINX配置

    http {
    
    	upstream tomcats {
        	#ip_hash;                                                                                                                                                                    
        	server t1.magedu.com:8080;
        	server t2.magedu.com:8080;
    	}
        server {
            location ~* \.(jsp|do) {
                proxy_pass http://tomcats;
            }
    	}
    }	
    

    tomcat1配置

    	<Host name="t1.magedu.com"  appBase="/data/webapps"
    		 unpackWARs="true" autoDeploy="true">
    		 ...
    		 <Membership className="org.apache.catalina.tribes.membership.McastService"
    		 address="230.100.100.8"
    		 port="45564"
    		 frequency="500"
    		 dropTime="3000"/>
    		 ...
    	</Host>
    

    tomcat2配置

    	<Host name="t1.magedu.com"  appBase="/data/webapps"
    		 unpackWARs="true" autoDeploy="true">
    		 ...
    		 <Membership className="org.apache.catalina.tribes.membership.McastService"
    		 address="230.100.100.18"
    		 port="45564"
    		 frequency="500"
    		 dropTime="3000"/>
    		 ...
    	</Host>
    

    tomcat1和tomcat2 web.xml配置

    <web-app>
    	...
         <distributable/>
    </web-app>
    

    效果展示:

    图1:在这里插入图片描述
    图2:
    在这里插入图片描述

    开启源地址hash

    在这里插入图片描述
    关闭tomcat2服务器

    在这里插入图片描述
    再次开启tomcat2服务器
    在这里插入图片描述

    展开全文
  • b、放开几个tomcat配置文件server.xml中cluster集群配置 c、分别启动tomcat 2)结果,集群无法连接上 No members active in cluster group. 3)工程配置和tomcat配置如附件 4)问题待解决,...

    1)按照步骤如下:

    a、打开web.xml的配置

    b、放开几个tomcat配置文件server.xml中cluster集群的配置

    c、分别启动tomcat


    2)结果,集群无法连接上

    No members active in cluster group.


    3)工程配置和tomcat配置如附件


    4)问题待解决,各路大神留言求解。

    展开全文
  • Tomcat实现Session复制

    2019-09-26 05:44:24
    Tomcat实现Session复制 需要三台虚拟机一台Nginx两台Tomcat 关闭相关安全机制 systemctl stop firewalldiptables -Fsetenforce 0 首先需要将两台Tomcat和一台nginx实现负载均衡 [root@nginx ~]# vim /usr/...

    Tomcat实现Session复制

    需要三台虚拟机一台Nginx两台Tomcat

    关闭相关的安全机制

    systemctl stop firewalld
    iptables -F
    setenforce 0

    首先需要将两台Tomcat和一台nginx实现负载均衡

    [root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf

     

    在http底下写入一个地址池里面写入你的IP地址:端口:权重

     

     upstream tomcat_server {                             #你的地址池

     

    server 192.168.200.12:8080 weight=1;         

     

    server 192.168.200.13:8080 weight=1;

     

        }

     

    在server里面实现你访问jsp的负载均衡

     

    location ~ \.jsp$ {

     

                proxy_pass http://tomcat_server;         #你的地址池名称

     

               proxy_set_header Host $http_host;

     

            }

     

     

    一:配置各个机器的主机名

    一台命名为Nginx

    两台命名为node1 ,node2

    [root@localhost ~]#hostname Nginx

    [root@localhost ~]#hostname node1

    [root@localhost ~]#hostname node2

    二:配置主机名与ip的映射

    [root@localhost ~]# vim /etc/hosts            #修改etc下的hosts文件

     

    192.168.200.16 nginx

    192.168.200.12 node1

    192.168.200.13 node2

    三:修改Tomcat的配置文件               

    注:两台Tomcat都要做相同配置

    [root@node1 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp              #创建测试文件
    Session ID:<%= session.getId() %><BR>
    Sessionport:<%= request.getServerPort() %>
    <% out.println("hello 192.168.200.12");%>

    [root@node1 ~]# vim /usr/local/tomcat/conf/server.xml       #修改Tomcat的主配文件

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">                #将括号中加入jvmRoute=“node1”主机名

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>                 #取消注释(还有官方的方法加入官方给的代码)

    [root@node1 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml        #修改web.xml文件

    将文件的倒数第二行加入<distrbutable/>

    四:重新启动服务

     

    [root@node1 ~]# /usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh
     五:如果出现错误需要添加组播地址

    route add -net 224.0.0.0 network 240.0.0.0 dev ens32     #最后写入自己的网卡名称

    六:测试

     

     

     

    转载于:https://www.cnblogs.com/ZCQ123456/p/11580943.html

    展开全文
  • 转载自 Tomcat集群session复制与Oracle坑问题描述公司某个系统使用了tomcat自带集群session复制功能,然后后报了一个oracle驱动包里面连接不能被序列化异常。01-Nov-2017 16:45:26.653 SEVERE ...
  • Tomcat集群 session复制

    2019-04-19 20:30:45
    利用Tomcat集群自带的session共享模块。 第一步:修改tomcat/conf/server.xml 将配置文件中的Cluster 节点的注释放开 <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please ...
  • [root@server ~]# vim /usr/local/tomcat9/conf/server.xml 128 <Engine name="Catalina" defaultHost="localhost" jvmRoute="本机IP或本机名"> #添加jvmRoute,填主机名话注意好hosts文件中映射 134 <...
  • 实现过程第1步修改tomcat的server.xml文件,在 节点下,添加以下内容:port="45564"frequency="500" dropTime="3000" />autoBind="100"selectorTimeout="5000" maxThreads="6" />...
  • 公司某个系统使用了tomcat自带集群session复制功能,然后后报了一个oracle驱动包里面连接不能被序列化异常。 01-Nov-2017 16:45:26.653 SEVERE [https-jsse-nio-8443-exec-2] org.apache.catalina.ha....
  • 多个tomcat之间的session复制

    千次阅读 2016-07-13 16:52:46
    用tomcat做负载集群时, 经常会用到session复制(Session Replication), 很多例子会告诉我们要配置apache或者其他的Web ...tomcat的session复制分为两种, 一种是全局试的(all-to-all), 这意味着一个node(tomcat实例)的
  • tomcat8.5实现session复制的配置文件(修改server.xml),将下面代码复制到&lt;engine ...&gt;下面 &lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" ...
  • tomcat6session复制

    2013-04-17 17:29:57
    说明:此配置针对一个ip下多个tomcat之间的session同步。 步骤: 修改应用1中server.xml中的[code="java"][/code],修改应用2中server.xml中的[code="java"][/code],注意jvmRoute不能相同 ...
  • className 表示tomcat集群时,之间相互传递信息使用那个类来实现信息之间传递. channelSendOptions可以设置为2、4、8、10,每个数字代表一种方式 2 = Channel.SEND_OPTIONS_USE_ACK(确认发送) ...
  • 看实例将远离。废话不多数,解之:   一个配置文件:  复制代码代码如下:                              
  • session复制session复制是指tomcat彼此之间通过组播方式将session发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,...Tomcat的session复制目前有两种类型,他们的配置稍有区别...
  • 如何为静态集群设置会话复制? 分为三步: 第一步: 举个例子:我们有两台...然后192.168.91.88下的tomcat的server.xml文件应该包含: <Cluster channelSendOptions="8" channelStartOptions="3" ...
  • Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。
  • 实现多个tomcat的集群,tomcat之间自动复制session,实现在一个tomcat失效后另一个tomcat可用,并有正确的session 二、软件 tomcat6.029 三、配置步骤 a.解压tomcat到文件夹,生成2分,tomcat1和tomcat2 ...
  • 一、前言,目前解决session共享方案有很多,包括使用redis、cookie、jvm_route、以及nginx第三方插件等,但最好方案我推荐使用reids,这里我就使用...-- 用于Session复制 --> <Cluster className="o...
  • 主要介绍了Tomcat实现session共享,其实就是session 会话复制的相关方法,需要朋友可以参考下
  • tomcat集群中的session管理,主要有两种方式: 1).粘性session 表示从同一窗口发来的请求都将有集群中的同一个tomcat进行处理 worker.lbcontroller.sticky_session=True  粘性session的好处在不会在不同的...
  • Nginx+tomcat+session复制负载均衡群集一.Nginx应用 通常情况下,一台tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样请求等问题,不能单独应用于生产环境,所以我们需要一套更可靠解学方案来完善Web...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 915
精华内容 366
关键字:

tomcat的session复制