精华内容
下载资源
问答
  • 傻瓜式的描述怎么实现在一台windows机器上怎么实现Apache2.2+Tomcat6.0的负载均衡和session复制,不用动脑子的,因为我自己在配置过程中由于某些设置有问题,死活不成功,被折磨了很久,所以把分析过程写下来,如果...
  • 本文将详细介绍Tomcat集群和Session复制应用,需要了解的朋友可以参考下
  • 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复制

    千次阅读 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

    展开全文
  • Tomcatsession复制技术

    2019-09-24 15:26:40
    <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel cl...

    一、准备三台机器
    主机的服务都正常,nginx与Tomcat构建负载均衡

    主机名IP地址
    nginx192.168.200.111
    Tomcat1192.168.200.112
    Tomcat2192.168.200.113

    准备hosts文件,并修改主机名为nginx 、tomcat1 、tomcat2

    [root@localhost ~]# vim /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.200.111 nginx
    192.168.200.112 tomcat1
    192.168.200.113 tomcat2
    [root@localhost ~]# hostname nginx
    [root@localhost ~]# bash
    [root@nginx ~]# 
    

    使用scp将/etc/hosts文件传到其它两台上

    [root@nginx ~]# scp /etc/hosts 192.168.200.112:/etc/hosts
    hosts        hosts.allow  hosts.deny   
    [root@nginx ~]# scp /etc/hosts 192.168.200.112:/etc/hosts
    The authenticity of host '192.168.200.112 (192.168.200.112)' can't be established.
    ECDSA key fingerprint is a1:3a:d3:5a:d8:dc:83:73:ee:be:5c:83:73:47:c3:db.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.200.112' (ECDSA) to the list of known hosts.
    root@192.168.200.112's password: 
    hosts    
    ————————————————————————
    [root@nginx ~]# scp /etc/hosts 192.168.200.113:/etc/hosts
    The authenticity of host '192.168.200.113 (192.168.200.113)' can't be established.
    ECDSA key fingerprint is d2:9d:0f:d3:4f:8b:35:f7:9d:e4:7c:9b:96:04:bc:25.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.200.113' (ECDSA) to the list of known hosts.
    root@192.168.200.113's password: 
    hosts   
    _________________________________________________________________________
    修改主机名
    [root@localhost ~]# hostname tomcat1
    [root@localhost ~]# bash
    [root@localhost ~]# hostname tomcat2
    [root@localhost ~]# bash
    

    二、修改Tomcat配置文件开启session复制功能

    [root@tomcat2 ~]# vim /usr/local/tomcat/conf/server.xml 
     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">   #另一台改为Tomcat1
          <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    ————————————————————————————————————————
    [root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml 
    <distributable/>
    

    三、准备测试文件,重启服务测试

    [root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
    Session ID:<%= session.getId() %><BR>
    SessionPort:<%= request.getServerPort() %>
    <% out.println("This tomcat server 192.168.200.112");%>
    ————————————————————————————————————————————
    [root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp
    Session ID:<%= session.getId() %><BR>
    SessionPort:<%= request.getServerPort() %>
    <% out.println("This tomcat server 192.168.200.113");%>
    

    [root@tomcat2 ~]# /usr/local/tomcat/bin/shutdown.sh 
    [root@tomcat2 ~]# /usr/local/tomcat/bin/startup.sh 
    

    测试结果
    在这里插入图片描述
    在这里插入图片描述
    四、补充Tomcat官方session复制方式
    注:其它更改还需要设置,与上边一样
    别忘了加 jvmRoute=“tomcat2”

    [root@tomcat2 ~]# vim /usr/local/tomcat/conf/server.xml 
    <!--<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
          -->
    <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.25.25.4"
                            port="45564"
                            frequency="500"
                            dropTime="3000"/>
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                          address="192.168.200.112"       #另一台将地址改为113
                          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>                                                                                    
    

    测试结果
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 一、前言,目前解决session共享方案有很多,包括使用redis、cookie、jvm_route、以及nginx的第三方插件等,但最好的方案我推荐使用reids,这里我就使用...-- 用于Session复制 --> <Cluster className="o...

    一、前言,目前解决session共享方案有很多,包括使用redis、cookie、jvm_route、以及nginx的第三方插件等,但最好的方案我推荐使用reids,这里我就使用tomcat的复制写一个。

    二、在需要复制的主机上的tomcat的server.xml的配置文件中添加如下内容

    <!-- 用于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" />
    		
    			<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.MessageDispatchInterceptor" />
    		</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.ClusterSessionListener" />
    	</Cluster>

    三、最后在项目的web.xml中加入如下配置

    最后配置完成后保存退出后启动即可,看到如图所示则表示配置成功

    此方法说的比较简洁,但都是实测,如果有问题可以随时讨论。

    展开全文
  • NULL 博文链接:https://xueweiabcok.iteye.com/blog/1841448
  • 公司花钱买的apache + tomcat 集群+session复制解决方案。 感觉对一些网站建设比较有用,但不太符合我们的产品
  • Tomcat内置的Session复制方案 https://tomcat.apache.org/ Receiver是配置组播接收者,接收地址address="172.16.1.138"和端口port=“4000”,我的理解就是这个配置是当前主机自己的信息,以这个信息加入到群集,...
  • 1、为什么会提出这个问题?使用Nginx+Tomcat进行负载均衡时,希望使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的...2、方案1:使用Tomcat内置的Session复制方案具体配置如下:&lt;!-- 第1步...
  • 配置session共享(这里介绍在tomcat中进行session复制) 安装redis(参考:虚拟机下各种服务配置)   拷贝tomcat 需要的jar 包到到${TOMCAT_HOME}/lib下(以下其中核心jar视tomcat版本而定,链接是支持tomcat7) ...
  • 1、请求精确定位:session sticky,例如基于访问ip的hash策略,即当前用户的请求都集中定位到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部署,会丢失,会话不复制
  • nginx+tomcat负载均衡和session复制

    千次阅读 2016-10-08 20:11:42
    本文介绍下传统的tomcat负载均衡和session复制. session复制是基于JVM内存的,当然在当今的互联网大数据时代,有更好的替代方案,如将session数据保存在Redis中. 1、安装Nginx 首先下载nginx,我下载的版本是...
  • Nginx反向代理 + Tomcat集群(session复制) 1.nginx安装先到官网下载需要的稳定版本的nginx版本,然后在编译安装。 1.1 具体操作可参考:https://www.cnblogs.com/wyd168/p/6636529.html 1.2 nginx反向代理配置 ...
  • b、放开几个tomcat配置文件server.xml中cluster集群的配置 c、分别启动tomcat 2)结果,集群无法连接上 No members active in cluster group. 3)工程配置和tomcat配置如附件 4)问题待解决,...
  • apache+Tomcat集群下session复制

    千次阅读 2014-12-05 18:09:51
    因为工作需要,本人需要在本机上做一个apache负载均衡Http请求,交给Tomcat集群处理,并且Session要在不同的Tomcat上进行复制的Demo。现贴出过程如下:
  • tomcatsession复制

    千次阅读 2018-05-12 19:56:42
    tomcat做负载集群时, 经常会用到session复制(Session Replication), 很多例子会告诉我们要配置apache或者其他的Web Server. 而事实上, 单纯从session复制的角度讲, 是不需要Web Server的. 1.tomcatsession复制...
  • Nginx+tomcat负载均衡集群session复制 windos
  • 1、基于tomcatsession共享至redis: *** 2、共享springboot内置tomcatsession涉及配置: 实现TomcatContextCustomizer 用于启动共享的redis 连接 public class Test implements TomcatContextCustomizer ...
  • 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 复制

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

    万次阅读 2016-08-09 16:15:06
    tomcat集群的主要方法有三种: 1、采用粘性会话,即某个ip只会访问集群中的某一台机器,这样就可以简单的解决session...3、采用session复制技术,tomcat本身已支持该功能。 三种方案各有优缺点。第一种存在部分单点问
  • [root@server ~]# vim /usr/local/tomcat9/conf/server.xml 128 <Engine name="Catalina" defaultHost="localhost" jvmRoute="本机IP或本机名"> #添加jvmRoute,填主机名的话注意好hosts文件中的映射 134 <...
  • 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复制...
  • 此压缩包为tomcat8利用redis实现session共享所需要的jar包,包含(commons-pool2-2.6.0.jar、jedis-2.9.0.jar、tomcat-redis-session-manager.jar)直接将三个jar包复制Tomcat目录lib下面,在修改conf下context.xml...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,315
精华内容 12,526
关键字:

tomcat的session复制