- 浏览: 579413 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
a1641693970:
还不错,学习了
BeanUtils使用总结(二)LazyDynaBean -
zjfshowtime:
很好的办法,学习了。
ORA-28001: the password has expired -
ya654277yo:
哦,多谢分享
Apache整合Tomcat后get方式提交中文乱码问题解决 -
foolkeeper:
nice !!
jvm内存参数设定 -
tracy821:
谢谢了,找了好久才找到
关于Spring 声明式事务处理时,throws exception不回滚的问题
Tomcat 5中的SESSION复制
在版本5之前,TOMCAT服务器只支持sticky sessions (使用mod_jk模块进行负载平衡)。如果我们需要SESSION复制,必须依靠第3方软件例如JavaGroups 去实现。
Tomcat 5服务器带有SESSION复制功能。和集群特征类似,只要修改 server.xml 注册文件就能实现SESSION复制。
Martin Fowler 在他的书《 Enterprise Patterns》中谈到三个SESSION状态持久性模式,这些模式包括:
1.客户端SESSION状态:在客户端存储SESSION状态
2.服务端SESSION状态:在一个序列化的FORM中保持SESSION状态到一个服务器系统上。
3.数据库SESSION状态:当在数据库中提交数据的时候存储SESSION数据。
TOMCAT支持以下三种SESSION持久性类型:
1.内存复制:在JVM内存中复制SESSION状态,使用TOMCAT 5安装带的SimpleTcpCluster 和 SimpleTcpClusterManager 类。这些类在包org.apache.catalina.cluster中,是server/lib/catalina-cluster.jar的一部分。
2.数据库持久性:在这种类型中,SESSION状态保存在一个关系数据库中,服务器使用JDBCManager类从数据库中获取SESSION信息。这个类在包org.apache.catalina.session.JDBCStore中,是catalina.jar的一部分。
3.基于文件的持久性:这里使用类PersistenceManager把SESSION状态保存到一个文件系统。这个类在包org.apache.catalina.session.FileStore中,是catalina.jar的一部分。
TOMCAT集群元素以及SESSION复制这章简要介绍一下组成TOMCAT集群的元素以及SESSION复制。
集群:
这个是集群中的主要元素, SimpleTcpCluster类代表这个元素。他使用在server.xml中指定的管理类为所有可分配的web contexts生成ClusterManager.
集群管理器
这个类关注跨越集群中所有节点间的SESSION数据复制。所有在web.xml文件中指定了distributable标记的WEB应用程序都会有SESSION复制。集群管理器作为集群元素的managerClassName属性在server.xml中指定。集群管理器的代码主要被设计用来分离集群中的元素。我们所要做的就是写一个SESSION管理器类去实现ClusterManager接口。这样能让我们灵活的使用客户集群管理器而不会影响到集群中的其他元素。这里有两个复制算法。SimpleTcpReplicationManager每次复制全部的SESSION,而DeltaManager只复制SESSION增量。
最简单的复制管理器在每次HTTP请求都复制所有的SESSION.在SESSION较小的时候这样是很有用的,我们可以只用以下代码:
HashMap map = session.getAttribute("map");map.put("data","data");
这里,我们不需要特别调用session.setAttribute() 或者 removeAttribute方法去复制SESSION变化。对于每次HTTP请求,在SESSION中的所有属性都被复制。可以使用一个叫做useDirtyFlag的属性去最优化SESSION被复制的次数。如果这个标记被设为真,我们必须调用setAttribute()方法去获取被复制的SESSION变化。如果被设为假,每次请求后SESSION都被复制。
SimpleTcpReplicationManager生成ReplicatedSession执行SESSION复制工作。
提供增量管理器仅仅是为了性能的考虑。它在每次请求的时候都做一次复制。同时他也调用监听器,所以如果我们调用session.setAttribute(),那么在其他服务器上的监听器就会被调用。DeltaManager生成DeltaSession执行 SESSION复制。
成员成员的建立通过由TOMCAT例程在同样的多点传送IP和端口发送广播消息。广播的消息包括服务器的IP地址和TCP监听端口(默认IP地址为228.0.0.4)。
如果在给定的时间框架内一个例程没有接收到消息(由集群配置中的mcastDropTime参数指定),成员被认为死亡。这个元素由McastService类表示。
由mcastXXX开始的属性用于成员资格多点传送PING.以下表格列出了用于IP多点传送服务器通讯的属性。
发送端
这个元素由ReplicationTransmitter类代表。当多点传送广播消息被接收到,成员被添加到机群。在下次复制请求前,发送例程将使用主机和端口信息建立一个TCP SOCKET.使用这些SOCKET发送序列化的数据。在TOMCAT 5中有3种不同的方法操纵SESSION复制:异步,同步,池复制模式。以下部分解释了这些模式怎样工作,以及他们将被使用在什么情况下。
●异步:在这种复制模式中,每个集群节点都有一个单线程扮演SESSION数据传送器。这里,请求线程会把复制请求发送到一个队列,然后返回给客户端。在失效无缝转移前,如果我们拥有sticky sessions,就应该使用异步复制。这里复制时间不是至关重要的,但是请求时间却是。在异步复制期间,请求在数据被复制完之前就返回了。这种复制模式缩短了请求时间。当每个请求被分的更开这种模式是很有用的。(例如,在WEB请求间有更长的延迟)。同样,如果我们不关心SESSION是否完成复制这个也很有用,当SESSION很较小时, SESSION复制时间也更短。
●同步:在这种模式中,一个单线程执行了HTTP请求和数据复制。集群中所有节点都接收到SESSION数据后线程才返回。同步意味被被复制的数据通过一个单SOCKET发送。由于使用一个单线程,同步模式可能会是簇性能的一个潜在的瓶颈。这种复制模式保证了在请求返回前SESSION 已经被复制。
●池:TOMCAT5 在使用池复制模式进行SESSION复制的方法上提供了很大的改进。
池模式基本上是同步模式的一个扩展版本。他基于的一个原则是:划分服务到多例程,每个例程处理不同的SESSION数据片段。同时对接收服务器开放多SOCKET进行发送SESSION信息。这种方法比通过单SOCKET发送所有东西更快。因此,使用一个SOCKET池同步复制SESSION.直到所有SESSION数据都复制完请求才返回。为了有效使用这种模式要增加TCP线程。由于使用多SOCKET,池模式使得集群性能的逐步提高以及更好的可测性。同样这种模式也是最安全的配置,因为它有足够数量的SOCKET在理想的时间内发送所有的SESSION数据到其他节点上。而使用单SOCKET,SESSION数据在通过集群时可能丢失或者只是部分传输。
接收端
这个集群元素由类ReplicationListener表示。在集群配置中以tcpXXX开始的属性用于TCP SESSION复制。以下表格列出了用于配置服务器复制中基于SOCEKT服务器通讯的属性。
复制值
复制值用于判断哪些HTTP请求需要被复制。由于我们不经常复制静态内容(例如HTML和javascript, stylesheets,图像文件),我们可以使用复制值元素过滤掉静态内容。这个值可以用于找出什么时候请求已完成以及初始化复制。
部署器
部署器元素可以用于部署集群范围的应用程序。通常,部署只部署/解除部署簇内的工作成员。所以在损坏的节点在启动时没有WARS的复制。当watchEnabled="true"时配置器为WAR文件监视一个目录(watchDir)。当添加一个新的WAR文件时,WAR被部署到本地例程,然后被部署到集群中的其他例程。当一个WAR文件从watchDir删除,这个WAR被从本地和集群范围内解除部署。
所有在TOMCAT集群结构中的元素以及他们的层次关系都在列在图1中
图 1. Tomcat 集群等级结构图。单击看原图。
TOMCAT中SESSION复制是怎么工作的
以下部分简要解释当TOMCAT服务器启动或则关闭时集群节点怎样分享SESSION信息,详细信息可参考Tomcat 5 Clustering文挡。
TC-01:集群中第一个节点TC-02:集群中第2个节点
●服务器启动:TC-01使用标准服务器启动队列启动。当主机对象被创建,即有一个集群对象和它相关联。当contexts被解析,如果distributable已经在web.xml中指定,那么TOMCAT为WEB CONTEXT创建SESSION管理器(SimpleTcpReplicationManager 取代StandardManager)。集群将会启动一个成员服务(成员的一个例程)和一个复制服务。
当TC-02启动,他也遵循第一个成员(TC-01)同样的队列但是有一个不同。集群被启动并且创建一个成员关系(TC-01,TC-02)。TC-02将向TC-01请求SESSION状态。TC-01回应该请求,在TC-2开始监听HTTP请求前,TC-01发送状态给TC-02.如果TC-01不回应,TC-02将在60秒后进入中止状态并且发布一个日志入口。SESSIONG 状态发送给所有在web.xml中指定了distributable的WEB应用程序。
●创建SESSION:当TC-01接收到请求,一个SESSION(S1)被创建,处理进入TC-01的请求和没有SESSION复制时是一样的。当请求完成时会有以下事件:ReplicationValve将会在回应返回给用户前截取请求。这里,会发现SESSION已经被改变,使用TCP复制SESSION到TC-02.●服务器储运损耗/关闭:当在集群中的一台服务器失败,维护损坏或者系统升级,其他节点会受到第一个节点已经脱离集群的通知。TC-02从他的成员资格列删除TC-01,并且TC-02在也不会收到有关TC-01任何变动的通知。负载平衡将会移至TC-02,所有的SESSION由TC-02控制。
当TC-01开始恢复,他再次遵循在服务器开始阶段描述的启动队列。加入到簇中并且以所有SESSIONG的当前状态和TC-02通讯。一旦接收到 SESSIONG状态,也就完成了加载然后打开它的HTTP/ mod_jk端口。所以,要等到从TC-2接受到SESSION状态TC-01才能发送请求。
●SESSION终止:如果在第一个节点的一个SESSION已经无效或则由于过期终止,无效请求将被截取,SESSION会被同其他无效SESSION放在一个队列中。当请求完成,服务器发送SESSIONG终止消息给TC-02而不是发送已经改变的SESSION,TC-02同样也会把该SESSION置无效。我们可以从服务器控制台看到SESSIONG无效的消息。无效SESSION在集群中将不会被复制,直到其他请求传出系统并且检查无效队列。
结束语
在这篇文章中,我谈了有关在集群环境中的SESSION复制,以及编写要求在内存内SESSIONG复制的J2EE应用程序时的一些设计注意事项。我同时也讨论了在TOMCAT 5容器中被指定来进行SESSIONG复制的簇元素。在这个系列的第2部分,我们将会看看怎样使用不同的SESSIONG 管理器和复制模式在TOMCAT集群中配置SESSIONG复制。
Srini Penchikala 是一个在Flagstar 银行工作的信息系统主题专家。
发表评论
-
F5负载均衡WAS重定向端口问题
2014-05-27 11:09 3470基于F5 WAS负载均衡,可直接通过IP访问首页http:X ... -
同一个Weblogic两个Domain CookieName冲突导致session失效问题
2012-09-25 11:03 2925问题描述: 同一个weblogic下新 ... -
EL表达式在tomcat7.0下的new关键字不能使用
2012-08-24 17:25 4078最近生产系统部署个小应用,服务器选型tomcat7.0,一直运 ... -
设置WebLogic启动内存
2012-07-02 20:25 1530我们经常在使用WebLoigc部署应用程序后,发现程序运行速度 ... -
Tomcat处理HTTP请求源码分析(下)
2012-05-18 17:18 1391很多开源应用服务器都是集成tomcat作为web contai ... -
Tomcat处理HTTP请求源码分析(上)
2012-05-18 17:16 1190很多开源应用服务器都是集成tomcat作为web contai ... -
Tomcat配置集锦
2012-05-16 16:37 1033配置基础验证(Basic Authentication) 容 ... -
多Tomcat多JDK部署
2012-03-23 17:51 11401、bin/catalina.bat: echo Using ... -
linux下apache、tomcat的安装及优化
2012-02-29 11:48 4240本文主要内容: (1)安装apr,这是 Apache 为了提 ... -
Spring 中集成 JOTM 配置 JTA 事务
2011-12-27 19:52 1605Spring 中集成 JOTM 配置 JTA 事务: ... -
在Tomcat中通过JOTM支持JTA
2011-12-27 19:40 2104Tomcat是Servlet容器,但它提供了JND ... -
jconsole监控JVM
2011-12-12 17:46 1577本地监控: Jconsole [processed] ... -
APACHE实现负载均衡
2011-08-09 12:58 1309随 着访问量的不断提高,以及对响应速度的要求,进行负载均衡设 ... -
理解session机制
2011-05-19 11:59 1424session机制是一种服务器端的机制,服务器使用一种类似于散 ... -
(转)Tomcat5集群中的SESSION复制 (3)
2010-12-08 16:46 1036集群安装 为了 ... -
(转)Tomcat5集群中的SESSION复制(1)
2010-12-08 16:37 1133Tomcat 5服务器为集群和SE ... -
Tomcat 7.0 在war文件外使用别名去存储静态内容
2010-09-30 00:43 2365web应用程序中的静态资 ... -
(转)Tomcat 更换JSP Compiler,Restricting Access to Specific Hosts
2010-04-24 18:01 1408改变Tomcat中的JSP编译器 ... -
(转)Tomcat配置单点登录(Single Sign-On)
2010-04-24 17:49 1536一旦你设置了realm和验证的方法,你就需要进行实际的用户登录 ... -
(转)Tomcat 配置基础验证(Basic Authentication)
2010-04-24 17:41 1707!-- Define the Members-on ...
相关推荐
在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...
在Tomcat5中,Session复制可以通过IP多点传送(IP multicast)和IP sockets实现。IP多点传送是一种一对多的服务器通讯机制,可以让多服务器向指定IP地址和端口号进行订阅并且监听消息。IP sockets则是一种点对点的...
一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。 而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session...
总结来说,Tomcat5中的SESSION复制是实现高可用Web服务的关键技术,通过IP多点传送和IP sockets确保了集群内的通信和SESSION一致性。理解并优化这些机制,可以帮助我们构建更加健壮和高效的分布式系统。
NULL 博文链接:https://xueweiabcok.iteye.com/blog/1841448
在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...
当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...
tomcat8 Redis集群 同步Session 中用到的jar 附带tomcat content.xml配置文件
在IT行业中,尤其是在Web...总的来说,利用Redis进行Tomcat集群Session共享是一种高效且灵活的方法,能够提高系统的可用性和用户体验。通过深入理解这一技术,开发者可以更好地构建和维护大规模分布式Web应用程序。
在构建高可用的Web服务时,Tomcat集群是常见的选择,但随之而来的一个问题就是如何在集群中的各个节点间共享Session。"Tomcat8集群session共享(redis处理)"的主题正是针对这一问题,通过集成Redis作为分布式缓存来...
本篇文章将深入探讨Tomcat集群中session共享的解决方案,以及相关的应用知识。 1. **Session复制**:这是最基础的session共享方法。通过配置Tomcat的`cluster`模块,可以设置session复制策略。每当一个session在...
通过复制应用和配置,可以创建一个Tomcat集群,这样当一台服务器出现故障时,其他服务器能够接管其工作,保证服务的连续性。然而,由于每个Tomcat实例都有自己的内存空间,所以默认情况下,每个服务器会独立维护用户...
这就是“Tomcat集群session共享”的核心需求。本篇将详细介绍如何在Tomcat7中实现基于Redis的Session共享,并涉及相关的jar包。 首先,让我们了解为何需要session共享。在单个Tomcat服务器中,Session信息存储在...
Tomcat5 提供了集群(Cluster)功能来实现 Session 的复制,确保用户在不同服务器间的会话状态能够无缝切换。以下是关于 Tomcat5 Session 复制的详细说明: 1. **配置集群组件** 在 `conf/server.xml` 文件中,你...
本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...
Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。
总之,通过合理配置Tomcat集群和使用Redis作为session存储,我们可以实现跨服务器的session共享,确保用户在多台服务器间的会话一致性。这个压缩包提供了一个预配置的解决方案,对于快速搭建和测试session共享环境...
本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...
本篇将深入探讨Apache如何实现负载均衡,以及Tomcat集群和session复制的相关知识。 首先,Apache的负载均衡主要通过模块mod_proxy来实现。这个模块能够将客户端的HTTP请求转发到不同的后端服务器,从而达到负载均衡...
tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用 tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用 ...