session复制
session复制是指tomcat彼此之间通过组播方式将session发到各个tomcat实例上,如果其中一个访问出错,则另外tomcat仍然具有有效的session内容,从而能正常接管其session。坏处是当tomcat实例很多,或者用户在session中有大量操作时,组播发送的信息量十分惊人。
Tomcat的session复制目前有两种类型,他们的配置稍有区别
分别为:org.apache.catalina.ha.session.DeltaManager和org.apache.catalina.ha.session.BackupManager
DeltaManager复制并发送Session数据到集群下所有的节点,这个实现类被证明非常可靠、运行得非常好。不过有个局限性就是集群的节点类型要相同,而且要部署相同的应用程序。
测试环境
Using CATALINA_BASE: "C:\tomcat_6_1"
Using CATALINA_HOME: "C:\tomcat_6_1"
Using CATALINA_TMPDIR: "C:\tomcat_6_1\temp"
Using JRE_HOME: "E:\Program Files\Java\jdk1.6.0_21"
Using CLASSPATH: "C:\tomcat_6_1\bin\bootstrap.jar"
Server version: Apache Tomcat/6.0.26
JVM Version: 1.6.0_21-b07
JVM Vendor: Sun Microsystems Inc.
一.DeltaManager
1.<distributable/> 配置
修改${CATALINA_HOME}\conf\web.xml文件,加入标签
<distributable/>
直接加在</web-app>之前
2.修改\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" [color=darkred]bind="127.0.0.1"[/color] address="228.0.0.4" port="45564" frequency="500" dropTime="3000" />
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="192.168.1.148" port="4005" 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=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt" />
<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>
二.DeltaManager
1.修改:
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
为:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true" mapSendOptions="6"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
[color=red] bind="127.0.0.1" [/color]
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
selectorTimeout="100"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" timeout="60000"/>
</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;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2.<distributable/> 配置
修改web应用里面WEB-INF目录下的web.xml文件,加入标签
<distributable/>
直接加在</web-app>之前
三.最后,其他可能操作,开启网卡组播功能:
route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
参考:
http://wiki.apache.org/tomcat/ClusteringOverview
http://blog.csdn.net/lifetragedy/article/details/7712691
分享到:
相关推荐
在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...
在Tomcat5中,Session复制可以通过IP多点传送(IP multicast)和IP sockets实现。IP多点传送是一种一对多的服务器通讯机制,可以让多服务器向指定IP地址和端口号进行订阅并且监听消息。IP sockets则是一种点对点的...
标题中的“tomcat8+memcached session共享”...其他实例在接收到同一用户的请求时,可以从Memcached中获取session数据,从而实现session的跨服务器共享。这种解决方案可以有效提升大型分布式系统的可扩展性和用户体验。
实现session复制,你可以使用多种方法。在TOMCAT+APACHE的场景下,一种常见的方式是通过TOMCAT的Clustering功能。配置TOMCAT集群,每个节点都会监听其他节点的session更新并同步它们。这需要在TOMCAT的server.xml...
而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session复制到所有的节点里, 比如有六个Tomcat实例 Tomcat1,Tomcat2,Tomcat3,Tomcat4,Tomcat5,Tomcat6 是可以配置成 三组互相复制...
描述中提到,“用于tomcat6 使用memcache 实现session共享的jar包”,这表明这些jar文件是为Tomcat6设计的插件或库,目的是通过Memcache这个内存缓存系统来存储和管理Session数据。Memcache是一个高性能、分布式的...
Tomcat5 提供了集群(Cluster)功能来实现 Session 的复制,确保用户在不同服务器间的会话状态能够无缝切换。以下是关于 Tomcat5 Session 复制的详细说明: 1. **配置集群组件** 在 `conf/server.xml` 文件中,你...
本篇文章将探讨如何利用Redis、Tomcat和Nginx来实现Session共享,以便在分布式环境中保持用户状态的一致性。 首先,让我们了解一下Session的概念。Session是Web服务器用来跟踪用户状态的一种机制。当用户登录后,...
2. 在Tomcat的`web.xml`配置文件中添加Session复制的相关配置,例如,引入Redis Session Manager的jar包,并配置相关的session-store-dir和manager类。 3. 配置Nginx,使用上游服务器块(upstream)定义Tomcat实例,...
此压缩包为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...
Tomcat可以通过两种方式实现session复制:基于TCP的复制和基于JVM-RMI的复制。前者是通过网络发送session更新,而后者则是利用Java的远程方法调用机制。在`server.xml`配置文件中,需要启用`<Manager>`元素的`...
【Apache + Tomcat Session 复制】:在一台运行Windows XP的计算机上,要实现Apache HTTP Server和Tomcat的负载均衡以及Session复制,通常需要使用Apache的mod_jk模块。这个过程涉及到Apache、Tomcat的配置,以及mod...
当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...
此外,为了确保session数据的安全性和一致性,Tomcat-Redis-Session-Manager提供了多种策略,如session过期策略、session复制和故障转移。例如,可以设置session的超时时间,当用户长时间无操作时,session将在Redis...
总之,`ngnix`、`memcached`和`tomcat6`的整合提供了高性能的Web服务环境,通过session复制保证了用户会话的连续性,而`Nginix`的负载均衡则确保了系统的可扩展性和可靠性。对于需要搭建类似环境的开发者来说,了解...
2. **配置Tomcat的session复制策略**:在`Tomcat7`的`server.xml`配置文件中,修改`Manager`元素,添加`org.apache.catalina.session.PersistentManager`作为session管理器。设置`storeDirectory`属性指向一个临时...
标题"tomcat8集群与redis实现session共享所需Jar包"指的是将Redis作为中央存储来保存Tomcat集群中的session数据。Redis因其高性能、轻量级以及丰富的数据结构支持,常被选作session共享的中间件。描述中的"本人已经...
标题 "Tomcat7集群实现共享session,已配置好" 暗示了这是一个关于在Tomcat7服务器集群环境中实现session共享的配置实例。在多台Tomcat服务器组成的集群中,session共享是解决用户会话在不同服务器之间无缝切换的...