Tomcat会话复制问题

TL; DR – 当主节点closures时,sessionId中的节点名称未被更新为备份中的当前节点名称。

Tomcat版本 – apache-tomcat-7.0.50

我有两个节点(我的应用程序在2个独立的tomcats中的两个实例),使用会话复制configuration(也使用粘滞会话).Below是来自server.xml的集群configuration,位于Engine标记内。 在两个节点中都是类似的,除了端口号:

<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" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4050" 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"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>\ </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> <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> 

从tomcatpipe理器中,我可以看到会话(例如:D042A0C5E380EB9E500224C87233119C.myNode1)正在login时在主节点上创build,并正确复制到备份中。

但是,一旦主节点出现故障,我预计备份节点中的sessionId将更新为当前节点名称,即:D042A0C5E380EB9E500224C87233119C.myNode2

例如:

用户login时:

 Node 1 - Primary - jsessionIdSample.node1 Node 2 - Backup - jsessionIdSample.node1 

当一个节点1出现故障时(预期)

 Node 1 - - jsessionIdSample.node1 (NODE GOES DOWN) Node 2 - Primary - jsessionIdSample.node2 

但是发生了什么事情:

 Node 1 - - jsessionIdSample.node1 (NODE DOWN) Node 2 - Backup - jsessionIdSample.node1 

我有两个问题:

1)我的理解是,在主节点closures之后不久,备份中的sessionID应该更新正确吗? 我读了tomcat文档,看起来应该。

2)如果应该的话,你可以帮我configuration这个工作吗?

我尝试过其他问题的解决scheme,但他们都没有工作。

提前致谢!

1)我的理解是,在主节点closures之后不久,备份中的sessionID应该更新正确吗? 我读了tomcat文档,看起来应该。

答:不行,小学生倒下的时候,倒下了。 没有时间将任何东西发布到备份节点“我要暗恋”。 在这里说的Tomcat文件,它会复制会话跨节点的集群。 对于提到更新的部分,意思是说,它将在所有节点上更新(不是已经被破坏的那个)。

2)如果应该的话,你可以帮我configuration这个工作吗?

答案: N / A