Tomcat 6 多机实现Session复制

本文深入分析了Tomcat集群环境下session复制的两种实现方式:DeltaManager和BackupManager,详细介绍了如何配置这些实现类以确保session在多个Tomcat实例之间的可靠传递,并提供了在测试环境中的具体步骤。同时,文章还强调了开启网卡组播功能对于session复制的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]session复制[/b]
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数据到集群下所有的节点,这个实现类被证明非常可靠、运行得非常好。不过有个局限性就是集群的节点类型要相同,而且要部署相同的应用程序。

[b]测试环境[/b]
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.


[b]一.DeltaManager [/b]
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>



[b]二.DeltaManager [/b]
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


参考:
[url]http://wiki.apache.org/tomcat/ClusteringOverview[/url]
[url]http://blog.youkuaiyun.com/lifetragedy/article/details/7712691[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值