首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat会话复制问题

Tomcat会话复制问题
EN

Server Fault用户
提问于 2016-10-07 10:46:15
回答 1查看 1.5K关注 0票数 3

TL;DR -当主节点关闭时,sessionId中的节点名不会更新为备份中的当前节点名。

Tomcat版本-apache 7.0.50

我设置了两个节点(两个独立的tomcats中的应用程序实例),会话复制配置(也使用粘性会话).Below是来自server.xml的集群配置,它位于引擎标记内。它在两个节点上都是相似的,除了端口号:

代码语言:javascript
复制
<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>

从tomcat中,我可以看到会话(Ex: D042A0C5E380EB9E500224C87233119C.myNode1)是在登录时在主节点中创建的,并在备份中正确复制。

但是,一旦主节点关闭,我希望备份节点中的sessionId将使用当前节点名(即: D042A0C5E380EB9E500224C87233119C.myNode2 )进行更新。

例子:

当用户登录时

:

代码语言:javascript
复制
Node 1 - Primary - jsessionIdSample.node1 
Node 2 - Backup - jsessionIdSample.node1 

当一个节点1下降时

(预期) :

代码语言:javascript
复制
Node 1 - - jsessionIdSample.node1 (NODE GOES DOWN) 
Node 2 - Primary - jsessionIdSample.node2 

但是正在发生什么:

代码语言:javascript
复制
Node 1 - - jsessionIdSample.node1 (NODE DOWN) 
Node 2 - Backup - jsessionIdSample.node1

我有两个问题:

1)我的理解是,sessionID应该在主节点下降后不久在备份中更新,对吗?我读了猫的文档,似乎应该看。

2)如果应该的话,你能帮我做一下配置吗?

我试过从其他问题中找到解决办法,但似乎都没有效果。

提前感谢!

EN

回答 1

Server Fault用户

发布于 2017-04-26 19:16:25

1)我的理解是,sessionID应该在主节点下降后不久在备份中更新,对吗?我读了猫的文档,似乎应该看。

答:不,当初选下降时,它就会下降。没有时间让它发布任何东西到备份节点“我要捣毁”。Tomcat文档在这里说,它将复制会话跨节点集群。对于提到更新的部分,它意味着它将跨所有节点进行更新(而不是已经崩溃的节点)。

2)如果应该的话,你能帮我做一下配置吗?

答:无

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/807712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档