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

    千次阅读 2016-05-16 23:43:46
    这样的话,我们就需要使用session复制,或者redis、memcache等缓存来实现,这里,介绍tomcat下的session复制。 1.部署两个tomcat 因为我是单机试验,所以就部署两个不同端口的tomcat,8080端口和8081端口...

      在一些项目中,可能有多个服务器,每个服务器都有session,但,同一个用户,我们肯定是希望只存在同一个session。比如,用户的多端登录。这样的话,我们就需要使用session复制,或者redis、memcache等缓存来实现,这里,介绍tomcat下的session复制。

    1.部署两个tomcat

      因为我是单机试验,所以就部署两个不同端口的tomcat,8080端口和8081端口,不清楚的同学,可以参考我这篇文章。tomcat单机多实例部署

     

    2.建立一个j2ee的项目

      这个项目,主要有二个功能,

      2.1 写一个session

      2.2 读取这个session中的值

    这里为了简单,就直接在jsp中操作session。

    index.jsp 放session

     

    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	<title>这是index.jsp 插入session</title>
    	<%
    		session.setAttribute("001Session", "001Session_val");
    		out.print("设置session 001Session的值为:001Session_val");
    	%>
    </head>
    <body>
    	
    </body>
    </html>

     

     

    index2.jsp 取session的值(8080端口)

     

    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	<title>001 获取session的值  index2.jsp</title>
    	<%
    		String sessionVal = (String)session.getAttribute("001Session");
    		out.print("8080端口的tomcat获取001Session的值:"+sessionVal);
    	%>
    </head>
    <body>
    	
    </body>
    </html>

     

     

    index3.jsp 取session的值(8081端口)

     

    <%@ page language="java" contentType="text/html; charset=utf-8"
    	pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    	<title>001 获取session的值  index3.jsp</title>
    	<%
    		String sessionVal = (String)session.getAttribute("001Session");
    		out.print("8081端口的tomcat获取001Session的值:" + sessionVal);
    	%>
    </head>
    <body>
    	
    </body>
    </html>

     

     

     

    3.配置tomcat

     

      1.配置8080端口,conf/server.xml文件,<server>节点,开启<Engine>节点,并增加属性 jvmRoute="jvm1"。在engine节点中,增加子节点内容

     

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

      2.配置8081端口,类似1步骤,只需要把jvmRoute="jvm2"

     

    tips:因为这里是本地开启2台tomcat,所以address="auto"
     

    4.测试效果

     

      前面三步已经打好准备,现在我们可以来看下效果。

    8080端口

      1.在session中写值,即访问8080端口下的index.jsp界面

      2.读session的值,即访问8080端口下的index.jsp界面

    8081端口

    3.读取session的值

    congratulation 8081端口顺利取得8080端口下写的session!

     

     

    代码下载

    参考 http://containsoft.iteye.com/blog/1728209

    http://nanquan.iteye.com/blog/1533906

    展开全文
  • Tomcat session 复制

    2015-08-27 10:18:22
    2. 修改conf/web.xml文件,添加 distributable 属性,表示Tomcat要为此web应用复制 Session。在web.xml文件最后加上distributable,具体配置如下:    <welcome-file>index.html</welcome-file>  ...

    From:http://blog.csdn.net/liuzhenwen/article/details/5335712

    1.修改conf/server.xml文件,把cluster部份注释去掉,修改tcpListenAddress和tcpListenPort参数。 如果有多网卡或虚拟网卡,增加下面参数mcastBindAddress="127.0.0.1" 具体配置如下:
            <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                     managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                     expireSessionsOnShutdown="false"
                     useDirtyFlag="true"
                     notifyListenersOnReplication="true">
                <Membership 
                    className="org.apache.catalina.cluster.mcast.McastService"
                    mcastBindAddress="127.0.0.1"  # 多网卡或虚拟网卡 
                    mcastAddr="228.0.0.4"
                    mcastPort="45564"
                    mcastFrequency="500"
                    mcastDropTime="3000"/>
                <Receiver 
                    className="org.apache.catalina.cluster.tcp.ReplicationListener"
                    tcpListenAddress="192.168.1.55"  # 配置IP地址
                    tcpListenPort="4001"             #配置端口,不能与其它tomcat的server.xml端口相同
                    tcpSelectorTimeout="100"
                    tcpThreadCount="6"/>
                <Sender
                    className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                    replicationMode="pooled"
                    ackTimeout="15000"
                    waitForAck="true"/>
                <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                       filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/>
                       
                <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                          tempDir="/tmp/war-temp/"
                          deployDir="/tmp/war-deploy/"
                          watchDir="/tmp/war-listen/"
                          watchEnabled="false"/>
                          
                <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
            </Cluster>
    2. 修改conf/web.xml文件,添加 distributable 属性,表示Tomcat要为此web应用复制 Session。在web.xml文件最后加上distributable,具体配置如下:
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    <distributable/>  #新加 的distributable属性 
    </web-app>
    3.去悼conf/server.xml文件里的注 释,这一步在实际应用中可以不用配置.
        <!-- You should set jvmRoute to support load-balancing via AJP ie :
        <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">         
        --> 
        修 改为
        <!-- You should set jvmRoute to support load-balancing via AJP ie :--> 

        < Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1" / > # jvm1可以修改为其它名字  

    展开全文
  • tomcat session 复制

    千次阅读 2010-03-01 14:21:00
    修改conf/web.xml文件,添加 distributable 属性,表示Tomcat要为此web应用复制 Session。在web.xml文件最后加上distributable,具体配置如下:    <welcome-file>index.html</welcome-file>  ...

    1.修改conf/server.xml文件,把cluster部份注释去掉,修改tcpListenAddress和tcpListenPort参数。 如果有多网卡或虚拟网卡,增加下面参数mcastBindAddress="127.0.0.1" 具体配置如下:
            <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
                     managerClassName="org.apache.catalina.cluster.session.DeltaManager"
                     expireSessionsOnShutdown="false"
                     useDirtyFlag="true"
                     notifyListenersOnReplication="true">
                <Membership
                    className="org.apache.catalina.cluster.mcast.McastService"
                    mcastBindAddress="127.0.0.1"  # 多网卡或虚拟网卡
                    mcastAddr="228.0.0.4"
                    mcastPort="45564"
                    mcastFrequency="500"
                    mcastDropTime="3000"/>
                <Receiver
                    className="org.apache.catalina.cluster.tcp.ReplicationListener"
                    tcpListenAddress="192.168.1.55"  # 配置IP地址
                    tcpListenPort="4001"             #配置端口,不能与其它tomcat的server.xml端口相同
                    tcpSelectorTimeout="100"
                    tcpThreadCount="6"/>
                <Sender
                    className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
                    replicationMode="pooled"
                    ackTimeout="15000"
                    waitForAck="true"/>
                <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
                       filter=".*/.gif;.*/.js;.*/.jpg;.*/.png;.*/.htm;.*/.html;.*/.css;.*/.txt;"/>
                      
                <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
                          tempDir="/tmp/war-temp/"
                          deployDir="/tmp/war-deploy/"
                          watchDir="/tmp/war-listen/"
                          watchEnabled="false"/>
                          
                <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/>
            </Cluster>
    2. 修改conf/web.xml文件,添加 distributable 属性,表示Tomcat要为此web应用复制 Session。在web.xml文件最后加上distributable,具体配置如下:
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    <distributable/>  #新加 的distributable属性
    </web-app>
    3.去悼conf/server.xml文件里的注 释,这一步在实际应用中可以不用配置.
        <!-- You should set jvmRoute to support load-balancing via AJP ie :
        <Engine name="Standalone" defaultHost="localhost" jvmRoute="jvm1">        
        -->
        修 改为
        <!-- You should set jvmRoute to support load-balancing via AJP ie :-->

        < Engine name = "Standalone" defaultHost = "localhost" jvmRoute = "jvm1" / > # jvm1可以修改为其它名字   

    展开全文
  • Tomcat Session复制配置

    2019-10-23 20:58:03
    Session 共享 Web.xml 增加如下标签 配置 server.xml 问题: 用户登录时报错 SEVERE: Manager [localhost#/menubuilder]: Unable to receive message through TCP channel java.lang....

    Session 共享
    Web.xml
    增加如下标签

    <distributable/>
    

    配置 server.xml

     <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.10" 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" timeout="30000" />
            </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=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;" />
        <ClusterListener
            className="org.apache.catalina.ha.session.ClusterSessionListener" />
    </Cluster>
    

    问题:
    用户登录时报错

    SEVERE: Manager [localhost#/menubuilder]: Unable to receive message through TCP channel java.lang.IllegalArgumentException: Session id mismatch, not executing the delta request
    ? ? ? ? at org.apache.catalina.ha.session.DeltaRequest.execute(DeltaRequest.java:160)
    ? ? ? ? at org.apache.catalina.ha.session.DeltaManager.handleSESSION_DELTA(DeltaManager.java:1280)
    

    解决方式
    删除如下两项配置

    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    ?<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
    
    展开全文
  • tomcat session复制(一)

    2011-05-05 16:32:40
    tomcatsession复制大致分两种:all-to-all和backup,先看all-to-all,主要是记录下自己读源代码的心得和代码流程    tomcat集群配置暂时略过。  在tomcat的启动过程中,找到seesion复制的入口,在...
  • tomcat session复制(二)

    2011-05-07 18:02:52
    写了session复制的发送部分,继续接收部分: 当接收方tomcat接收到需要session的消息时,最终调用了GroupChannel的messageReceived()方法 public void messageReceived(ChannelMessage msg) {...
  • 傻瓜式的描述怎么实现在一台windows机器上怎么实现Apache2.2+Tomcat6.0的负载均衡和session复制,不用动脑子的,因为我自己在配置过程中由于某些设置有问题,死活不成功,被折磨了很久,所以把分析过程写下来,如果...
  • 2. 修改conf/web.xml文件,添加 distributable 属性,表示Tomcat要为此web应用复制 Session。在web.xml文件最后加上distributable,具体配置如下:    <welcome-file>index.html</welcome-file>  <welcome-file>...
  • Tomcat,使用自己开发的Apache Tribes(http://tomcat.apache.org/tomcat-6.0-doc/tribes/introduction.html)进行session复制。 Apache Tribes就是用IP的D类地址,使用IP组播和组播协议,完成Session的复制。 IP组播...
  • tomcat5 session 复制

    2013-01-04 12:49:11
    tomcat5 session 复制
  • tomcat session会话复制

    2017-03-25 20:16:10
    Tomcat实现session共享一、如何保持session会话目前,为了使web能适应大规模的访问,需要实现应用的集群部署。集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样...
  • tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制tomcat集群实现session复制...
  • tomcatsession复制

    千次阅读 2018-05-12 19:56:42
    tomcat做负载集群时, 经常会用到session复制(Session Replication), 很多例子会告诉我们要配置apache或者其他的Web Server. 而事实上, 单纯从session复制的角度讲, 是不需要Web Server的. 1.tomcatsession复制...
  • 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复制

    2019-04-19 20:30:45
    利用Tomcat集群自带的session共享模块。 第一步:修改tomcat/conf/server.xml 将配置文件中的Cluster 节点的注释放开 <Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please ...
  • session复制session复制是指tomcat彼此之间通过组播方式将session发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是当tomcat实例很多,或者...
  • tomcat-session复制

    2015-01-15 11:43:21
    参考:tomcat.apache.org -->Documentation -->TomcatX -->Clustering实验环境:centos5.11 64,jdk1.6 tomcat6IP:192.168.10.10 tomcatA nginx , tomcat ,IP:192.168.10.11 tomcatB tomcat配置如...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,079
精华内容 431
关键字:

tomcatsession复制