Tomcat集群和Session复制应用介绍_java

一个配置文件:

复制代码 代码如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<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="5000"
selectorTimeout="100"
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"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<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>

说明如下:
1、Cluster

复制代码 代码如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">

1)Tomcat集群主元素,在这个元素里面可以配置集群的所有详细信息
2)className主要的集群类,当前只提供了org.apache.catalina.ha.tcp.SimpleTcpCluste作为实现类
3)channelSendOptionssession发送方式,默认值是8,这个标识确定通过SimpleTcpCluste如何发送消息
4) Channel.SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004
Channel.SEND_OPTIONS_ASYNCHRONOUS = 0x0008
Channel.SEND_OPTIONS_USE_ACK = 0x0002
如果使用(ASYNCHRONOUS)加(USE_ACK)方式来发送消息,那么值应该是10(8+2)或者0x000B
如果使用(SYNCHRONIZED_ACK)加(USE_ACK)方式来发送消息,那么值应该是6(4+2)或者0x0006
2、Manager

复制代码 代码如下:

<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<!--
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
-->

 1)管理tomcat之间的session复制
2)className当前有两个实现类:org.apache.catalina.ha.session.DeltaManager和org.apache.catalina.ha.session.BackupManager
  3)DeltaManager复制并发送Session数据到集群下所有的节点,这个实现类被证明非常可靠、运行得非常好。不过有个局限性就是集群的节点类型要相同,而且要部署相同的应用程序
4)expireSessionsOnShutdown当一个web程序被结束时,tomcat分发销毁命令到每个Session,并通知所有session listener执行。当集群下某个节点被停止时,如果想销毁所有节点下的的Session,设置为true,默认为false
5)notifyListenersOnReplication如果设置为true,当session属性被复制和移动的时候,session listener被通知
3、Channel

复制代码 代码如下:

<Channel className="org.apache.catalina.tribes.group.GroupChannel">

Channel是Apache Tribes的主组件,channel管理一组子组件,并和它们一起组成了tomcat实例间的通讯框架。在tomcat集群中,DeltaManager通过SimpleTcpCluster调用channel来实现信息传递,而BackupManager自己调用channel以及子组件这些组件来实现信息传递。ReplicatedContext也会调用channel传递context属性。
4、Membership

复制代码 代码如下:

<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>

MemberShip组件自动检索发现集群里的新节点或已经停止工作的节点,并发出相应的通知。默认使用组播(Multicast)实现。
5、Receiver

复制代码 代码如下:

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5000"
selectorTimeout="100"
maxThreads="6"/>

负责监听接收其他节点传送过来的数据。默认使用non-blocking TCP Server sockets。
6、Sender

复制代码 代码如下:

<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>

管理从一个节点发送到另外一个节点的出站连接和数据信息,允许信息并行发送。默认使用TCP Client Sockets。
7、Interceptor

复制代码 代码如下:

<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>

Channel通过Interceptor堆栈进行消息传递,在这里可以自定义消息的发送和接收方式,甚至MemberShip的处理方式。
8、Value

复制代码 代码如下:

<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>

1)Value在调用Http Request 链中起着拦截器的作用,用来决定什么情况下数据需要被复制。
org.apache.catalina.ha.tcp.ReplicationValve,ReplicationValue在Http Request结尾判断当前数据是否需要被复制。
2)Filter内容为url或者文件结尾,当访问链接配置filter时,不论实际session有没有改变,集群会认为session没有任何变化,从而不会复制和发送改变的session属性。
9、Deployer

复制代码 代码如下:

<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>

使集群支持farmed deployment
10、ClusterListener

复制代码 代码如下:

<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

Clusterlistener用来追踪信息发送和接收。
ClusterSessionListener用来监听集群组件接收信息,当使用DeltaManager的时候,信息被集群接收,并通过ClusterSessionListener传递给Session Manager。

时间: 2024-10-29 02:34:18

Tomcat集群和Session复制应用介绍_java的相关文章

tomcat集群的session问题

问题描述 tomcat集群的session问题 假设5台服务器,均为tomcat,作为一个集群,现在需要共享session,达到一个用户只能有一个活动session的情况. 应该怎么搞... 欢迎提建议... 解决方案 根据sessionid,存到memcache里去

Nginx+Tomcat7+Memcached实现tomcat集群和session共享问题

问题描述 由于最近项目要升级进行负载均衡,网上看了很多文章,确定还是用Nginx+Tomcat+Memcached实现tomcat集群和session共享这种方式来实现.经过网上一些配置参考Demo版本成功了.session也共享成功.在满心欢喜的情况下,还以为这么快就搞定了.事实不既然,我把我们web项目部署进去,结果出现很多问题.想必这些问题过来人肯定遇到过.问题如下:1.2个tomcat7单独启动,项目部署进去,都可以登录进去并运行.这是我的配置Memcached在tomcat7/conf

apache tomcat 负载均衡集群和session复制 基于jk

apache服务器和tomcat的连接方法其实有三种:JK.http_proxy和ajp_proxy. 本文主要介绍最为常见的JK. 基于centos5.5 linux下配置: 1.安装tomcat7.apache2.2.22服务器及版本对应的JK 这里需要注意的是JK版本必须与apache服务器版本号对应.apache下载 对应的linux的编译的jk版本可以去 mod_jk.so去下载 注意点:如果你安装的apache是2.0.63版本或者说是2.0.X版本做好选用 mod_jk-1.2.2

关于 tomcat 集群中 session 共享的三种方法

前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享.  建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,  不只是缓存 session ,还可以做其他用途,一举几得啊.  1.使用 filter 方法存储  这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于 tomcat ,而且实现的原理比较简单容易控制.  可以使用 memcached-session-f

nginx 与 tomcat 集群 一二事 (0) - 简单介绍

最近看了nginx以及tomcat的集群,通俗的做一下简单总结吧 nginx 是一个http服务器,是由俄罗斯人发明的,目前主流的服务器,作为负载均衡服务器,性能非常好,最高支持5万个并发连接数,在淘宝被广泛使用(据说被淘宝的工程师优化到单机200万的并发,非常的厉害) 单个tomcat最大支持的用户并发量默认是150,在测试过程中250左右开始会有性能的问题 举个栗子,有3台tomcat,有N多请求同时经过nginx的时候,nginx作为一个路由,把请求分别分发给这3台tomcat,以此减少t

jboss eap 6.3 集群(cluster)-Session 复制(Replication)

本文算是前一篇的后续,java web application中,难免会用到session,集群环境中apache会将http请求智能转发到其中某台jboss server.假设有二个jboss server:Server A,Server B,Session值在Server A上.用户在访问某一个依赖session的页面时,如果第一次访问到Server A,能正常取到Session值,刷新一下,如果这时转发到Server B,Session值取不到,问题就来了. 解决的办法简单到让人不敢相信,

session-apache tomcat集群Session 共享后报错!

问题描述 apache tomcat集群Session 共享后报错! 我参考http://www.blogjava.net/killme2008/archive/2007/03/13/103607.html 实现session共享.然后我把我的工程放到tomcat 里面去.启动不报错.点击登录的时候就登录不进去.多次点击登录按钮会进入到主界面然后又强制退出到登录界面.我的tomcat集群版本是Apache 2.2.25Tomcat-7.0.55 点击登录的时候报:严重: Manager [loc

Tomcat集群后,多个Tomcat之间如何共享jar?

问题描述 Tomcat集群后,多个Tomcat之间如何共享jar? Tomcat集群后,多个Tomcat之间如何共享jar?注意是多个Tomcat之间不是,多个项目之间. 因为每个tomcat都需要拷贝一遍包,有没有办法实现多个Tomcat共享jar? 解决方案 我不知道你看没有看到过这个博客- http://my.oschina.net/fuyung/blog/206112 祝好运 解决方案二: tomcat集群及seeion共享tomcat集群session共享Tomcat 集群配置 Ses

tomcat+apache-两台Tomcat+apache+mod_jk 集群,session共享没问题,控制台报错

问题描述 两台Tomcat+apache+mod_jk 集群,session共享没问题,控制台报错 2015-1-26 9:55:17 org.apache.catalina.ha.tcp.ReplicationValve sendReplicationMessage 严重: Unable to perform replication request. java.lang.NullPointerException at org.apache.catalina.ha.tcp.Replication