`
jiagyao
  • 浏览: 99317 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Tomcat 5集群中的SESSION复制(二)(转)

阅读更多
集群安装
  
  为了在TOMCAT5容器中SESSION复制可用,必须完成以下步骤:
  
  ●    为了集群能够工作,你必须使用你系统上的多点传送可使用
  ●    为了有些使用SESSION复制,所有TOMCAT例程必须同样配置。这意味着WEB应用程序必须统一的部署在集群中的每台服务器上。这些配置同样简化了集群管理,维护和发现维修故障的任务。
  ●    在server.xml未注释的Cluster 和Valve (ReplicationValve) 元素。起用server.xm中的CLUSTER元素意味着所有WEB CONTEXT的SESSION管理器将会改变。因此 当运行一个集群的时候,你应该确保只有一个需要被集成WEB应用程序并且移除其他的。
  ●    如果服务器例程运行在同样的机器上,应该确保每个例程的tcpListenPort属性是一致的。
  ●    确保web.xml有distributable属性
  ●    所有的SESSION属性必须实现java.io.Serializable接口
  
  范例集群安装有两个TOMCAT例程和一个负载平衡用于分配服务器间的请求。所有三个服务器都运行在一个单独的机器上,以下表格列出了集群和负载平衡上的配置参数。
  
  
 

  
  编辑注解:以上Web App Directory中的值为了适应排版而换行了。在你的部署中,每个值应该是单一而完整的一行
  
  注意:不要设置tcpListenAddress为127.0.0.1,因为127用于回环地址,在SESSION复制期间可能会出现问题。
  
  负载平衡器安装
  
  TOMCAT服务器不提供失效转移能力用于当一个集群接点失效的时候重定向任何引入的请求到下一个可用的服务器上。所以我使用一个分开的负载平衡器去管理WEB请求的负载平衡。有一些流行的负载平衡器例如Apache/mod_jk, Balance, 和 Pen。我在范例集群安装中使用Pen作为负载平衡器。
  
  Pen是一个简单的,基于TCP协议,例如HTTP或者SMTP的负载平衡器。他允许多个服务器对外表现为一个服务器,并且自动检测关闭的服务器,在可用的服务器间分配客户断。他提供了负载平衡和失效转移能力。Pen易于安装以及配置,非常容易使用和运行在Windows和UNIX操做系统上。范例配置使用round-robin负载平衡算法用于在集群节点间分配负载平衡
  
  运行负载平衡器的命令如下:
  pen -r -a -f -d localhost:8080 192.168.0.10:9080 192.168.0.20:10080
  
  以下是用于启动负载平衡器的每个命令行参数的解释
  
  -r: 使用round robin负载平衡
  -a: 打印来回发送的ASCII格式的数据
  -f: 保持在前台
  -d: 起用DEBUG模式
  
  想要知道更多用于启动PEN的参数细节,请访问PEN网站
  
  图表1展示了两个集群节点,一个负载平衡器,仪器层,以及测试客户端的拓扑图
  
  
 
  Figure 1. Cluster setup diagram

  
  测试安装
  
  我创建了一个叫做clusterapp的WEB应用程序来验证集群安装以及SESSION复制原理。为了测试真实的SESSION复制,我写了一个叫做SessionReplicationClient的简单JAVA客户端用语测试从一个服务器拷贝SESSION数据到另外一个服务器的需要的时间。这个客户端使用Jakarta Commons HttpClient况架去创建和操作HTTP SESSION并且调用TOMCAT服务器上的一个SERVLET。用于测试SESSION复制的机器软硬件配置如下:
  
  ●    CPU: HP Pavilion Pentium III 800MHz
  ●    Memory: 512MB RAM
  ●    Hard disk: 40GB
  ●    Operating system: Windows 2000 server
  ●    JDK version: 1.4.2_05 (Note: JDK 1.4 or later version is required to use clustering and session replication)
  ●    Tomcat version: 5.0.28
  ●    Tools: Pen, Log4J, Eclipse, Commons HttpClient
  
  当一个复制客户端程序运行的时候,他首先设置一个作用指令用于这样操纵SESSION(例如,添加一个新的属性到SESSION,从SESSION中移除一个已存在的属性,或则让一个SESSION失效)。然后客户端通过在Commons HttpClient框架使用HttpClient和PostMethod类调用ReplicationServlet。基于这些SESSION命令,servlet生成一个新的SEESION或者修改一个已经存在的SESSION并且转到一个WEB页面中瞻示SESSION细节。如果在管理SESSION中有任何错误,则转到一个错误页面。我写了一个定制的SESSION监听类(ClusterAppSessionListener)用于跟踪SESSION管理的细节,例如新SESSION的创建,修改或则终止已经存在的SEESION。
  
  图表2展现了SESSION复制流程
  
  
 
  Figure 2. Session replication sequence diagram

  
  服务器上的SESSION状态通过每个WEB请求的COOKIE跟踪,所以为了保持使用同样的SESSION,从客户端发出的请求URL必须一样。另外,在每次请求都创建一个新的HTTP SESSION。我使用了两种类型的,基于添加到SESSION中的属性类别的测试方法去测试复制。
  
  第一个类别有100个轻量对象(每个1K)添加到SESSION。第2个类别中,我添加了一个单一的大对象(100K)去比较基于SESSION属性大小的SESSION复制所花费的时间
  
  以下列出了SessionReplicationClient的测试规格:
  
  ●    客户端线程数:2
  ●    旋环次数:1000
  ●    请求延迟:1000 milliseconds
  ●    测试范例数:1000
  ●    SESSION属性:小(100个1K大小的对象)或则大(一个100K大小的对象)
  
  使用指定参数运行测试客户端的命令如下:
  
  java -Dlog4j.configuration=log4j.xml com.clusterapp.test.SessionReplicationClient 2 192.168.0.10 9080 1000 1000 lite
  
  测试环境包括使用不同的SESSION管理器(SimpleTcpReplicationManager 或则 DeltaManager)和SESSION复制模式(同步,异步,池),以下表格列出了在TOMCAT集群中的一系列测试环境:
  
  
 

  
  想要把复制模式从池该到同步或异步,只要在server.xml文件中的SENDER标志中修改replicationMode属性值就可以了。同样,要改变SESSION管理器的类型,只要改变Cluster元素的managerClassName属性。
  
  以下参数用于比较反应时间和SESSION复制的效率:
  
  ●    平均反映时间(ms)
  ●    平均请求时间(ms)
  ●    集群开销时间(ms)
  ●    复制时间(ms)
  ●    比率(bytes/ms)
  ●    比率(bytes/request)
  
  测试结果
  
  delta管理器和池复制模式相结合使用对与SESSION复制效率是最好的标准。同样,保持SESSION大小较小可以比复制大SESSION快2到3倍。
  
  
 

  
  复制管理器
  
  DeltaManager在SESSION复制方面更有效,因为他仅仅处理SESSION deltas而不是全部的SESSION数据。使用DeltaManager,与使用简单复制管理器比较,SESSION复制效率会提高30%(大SESSION)到50%(小SESSION)。
  
  复制模式
  
  与其他两个选项(同步和异步)比较,池复制模式复制SESSION花费更好的时间。在一个复制时间内,池选项几乎是同意选项的 4倍快。但是在反应时间和集群开销时间方面,池和同步模式几乎一样,因为在同步模式里,集群在返回前不用等待SESSIONG完成复制
  
  综述
  
  基于SESSION复制测试的结果,我们得出结论:应该在任何可能时候使用DeltaManager。因为复制SESSION数据的开销是意义重大的,必须确保没有在SESSION中存储太多的数据同样,添加到SESSION中的属性大小也是影响到SESSION复制时间的另一个因素。当我运行测试在SESSION存储大对象(100K)的时候,与在SESSION中存储小对象(1K)相比较,复制时间非常高。想要最小化SESSION复制开销最好的方法是避免调用session.setAttribute()以及把数据存储在请求对象中而不是SESSION中。这样相对更好因为当WEB请求完成的时候请求属性会被重置。同样,如果没有商业方面的原因要在服务器存储数据,我们可以以COOKIES的形式在客户端存储数据。这种方法完全避免了使用任何SESSIOIN的需要。
  
  一种最小化SESSION复制时间开销的方法是限制集群中到两个或则三个服务器上的服务器例程数目。这样当第一个服务器失败的时候第一个服务器上的SESSION数据已经被拷贝到第二个服务器上。为了保持网络畅通,集群可以分割成小块的组,每个组包括两个或则三个服务器例程。记住,集群中的服务器越多,SESSION复制花费的时间也越多。目前TOMCAT5不支持首要/次要复制的概念。在以后发布的版本中将会有,这样我们将可以在一个或则两个备份服务器上存储SESSION。拥有这个特性的话,TOMCAT将会为在集群环境中运行WEB服务器提供更全面的SESSION复制方法。
  
  在未来TOMCAT将会支持的一些属性:
  
  ●    拥有在SESSION中存在非序列化的属性的能力,集群将会忽略该属性
  ●    拥有复制context属性以及非序列化的相关数据的能力,例如JDBC连接池和对象CACHES。
  
  这些特性将会使在TOMCAT集群中的SESSION复制更强壮和灵活。
  
  I want to thank Filip Hanik for his valuable suggestions and feedback on the replication modes, session replication web application setup, and the test client sections of this article.
分享到:
评论

相关推荐

    tomcat集群实现session复制

    在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...

    Tomcat5集群中的Session复制

    在Tomcat5中,Session复制可以通过IP多点传送(IP multicast)和IP sockets实现。IP多点传送是一种一对多的服务器通讯机制,可以让多服务器向指定IP地址和端口号进行订阅并且监听消息。IP sockets则是一种点对点的...

    tomcat cluster 集群 session复制

    一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。 而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session...

    tomcat5集群中的SESSON复制

    总结来说,Tomcat5中的SESSION复制是实现高可用Web服务的关键技术,通过IP多点传送和IP sockets确保了集群内的通信和SESSION一致性。理解并优化这些机制,可以帮助我们构建更加健壮和高效的分布式系统。

    apache tomcat 集群 负责均衡 session复制

    NULL 博文链接:https://xueweiabcok.iteye.com/blog/1841448

    tomcat8集群实现session共享,内含session共享包

    在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...

    tomcat7集群实现session共享

    当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...

    tomcat8 redis集群 session共享 jar

    tomcat8 Redis集群 同步Session 中用到的jar 附带tomcat content.xml配置文件

    Tomcat7集群共享Session 基于redis进行统一管理

    在IT行业中,尤其是在Web...总的来说,利用Redis进行Tomcat集群Session共享是一种高效且灵活的方法,能够提高系统的可用性和用户体验。通过深入理解这一技术,开发者可以更好地构建和维护大规模分布式Web应用程序。

    tomcat8集群session共享(redis处理)

    在构建高可用的Web服务时,Tomcat集群是常见的选择,但随之而来的一个问题就是如何在集群中的各个节点间共享Session。"Tomcat8集群session共享(redis处理)"的主题正是针对这一问题,通过集成Redis作为分布式缓存来...

    tomcat7集群session共享memcache依赖包1.8.3

    通过复制应用和配置,可以创建一个Tomcat集群,这样当一台服务器出现故障时,其他服务器能够接管其工作,保证服务的连续性。然而,由于每个Tomcat实例都有自己的内存空间,所以默认情况下,每个服务器会独立维护用户...

    tomcat集群session共享解决方案

    本篇文章将深入探讨Tomcat集群中session共享的解决方案,以及相关的应用知识。 1. **Session复制**:这是最基础的session共享方法。通过配置Tomcat的`cluster`模块,可以设置session复制策略。每当一个session在...

    Nginx Tomcat 集群的Session 复制

    Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。

    Nginx+tomcat负载均衡集群session复制 windos

    本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...

    tomcat集群session共享jar tomcat7专用jar

    这就是“Tomcat集群session共享”的核心需求。本篇将详细介绍如何在Tomcat7中实现基于Redis的Session共享,并涉及相关的jar包。 首先,让我们了解为何需要session共享。在单个Tomcat服务器中,Session信息存储在...

    Tomcat7集群实现共享session,已配置好。

    总之,通过合理配置Tomcat集群和使用Redis作为session存储,我们可以实现跨服务器的session共享,确保用户在多台服务器间的会话一致性。这个压缩包提供了一个预配置的解决方案,对于快速搭建和测试session共享环境...

    tomcat5 session 复制

    Tomcat5 提供了集群(Cluster)功能来实现 Session 的复制,确保用户在不同服务器间的会话状态能够无缝切换。以下是关于 Tomcat5 Session 复制的详细说明: 1. **配置集群组件** 在 `conf/server.xml` 文件中,你...

    redis+tomcat集群配置session共享

    本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...

    Apache负载均衡 Tomcat6的集群和session的复制

    本篇将深入探讨Apache如何实现负载均衡,以及Tomcat集群和session复制的相关知识。 首先,Apache的负载均衡主要通过模块mod_proxy来实现。这个模块能够将客户端的HTTP请求转发到不同的后端服务器,从而达到负载均衡...

    tomcat8.5.29 redisclouder集群 session共享集群相关配置文件

    tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用 tomcat8.5.29 redisclouder集群 session共享集群相关配置文件 亲测可用 ...

Global site tag (gtag.js) - Google Analytics