Problema de replicação de sessão do Tomcat

3

TL; DR - O nome do nó no sessionId não está sendo atualizado para o nome do nó atual no backup quando o principal fica inativo.

Versão do Tomcat - apache-tomcat-7.0.50

Eu tenho dois nós (2 instâncias do meu aplicativo em 2 tomcats separados) configurados, com a configuração de replicação de sessão (também usa sessão fixa) .Below é a configuração do cluster de server.xml, que está dentro da tag Engine. É semelhante em ambos os nós, exceto os números de porta:

<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>

No tomcat Manager, vejo que a sessão (Ex: D042A0C5E380EB9E500224C87233119C.myNode1) está sendo criada no nó primário no login e replicada corretamente no backup.

Mas, assim que o nó principal fica inativo, estou esperando que o sessionId no nó de backup seja atualizado com o nome do nó atual, por exemplo: D042A0C5E380EB9E500224C87233119C.myNode2

Exemplo:

Quando o usuário faz login:

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

Quando um nó 1 desce (esperado) :

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

Mas o que está acontecendo:

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

Eu tenho duas perguntas:

1) O meu entendimento é que o sessionID deve ser atualizado no backup logo após o nó primário cair corretamente? Eu li os documentos do Tomcat, e parece que deveria.

2) Se puder, você pode me ajudar com a configuração para fazer isso funcionar?

Eu tentei soluções de outras perguntas sobre SO, mas nenhuma delas parece funcionar.

Obrigado antecipadamente!

    
por bub 07.10.2016 / 12:46

1 resposta

1

1) Is my understanding that the sessionID should be updated in the backup soon after the primary node goes down correct? I read the tomcat docs, and it seems it should.

Resposta: Não, quando o primário desce, desce. não há tempo para postar nada no nó de backup "Eu vou esmagar". o documento do Tomcat disse aqui, ele replicará o cluster cruzado da sessão de nós. para a parte que mencionou atualização, isso significa que ela será atualizada em todos os nós (não a que já foi esmagada).

2) If it should, can you please help me with the config to make this work?

Resposta: N / A

    
por 26.04.2017 / 21:16