Проблема репликации сеанса Tomcat

TL; DR - имя узла в sessionId не обновляется до текущего имени узла в резервной копии при переходе основного вниз.

Версия Tomcat - apache-tomcat-7.0.50

У меня установлено два узла (2 экземпляра моего приложения в 2 отдельных котиках) с конфигурацией репликации сеанса (также используется липкий сеанс). конфигурация кластера из server.xml, который находится внутри тега 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>

Из диспетчера tomcat я вижу, что создается сеанс (например: D042A0C5E380EB9E500224C87233119C.myNode1) в основном узле при входе в систему и правильно реплицируется в резервной копии.

Но, как только основной узел выйдет из строя, я ожидаю, что sessionId в резервном узле будет обновлен с использованием текущего имени узла, например: D042A0C5E380EB9E500224C87233119C.myNode2

Пример:

Когда пользователь входит в систему:

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) Насколько я понимаю, идентификатор сеанса должен быть обновлен в резервной копии вскоре после первичной узел выходит из строя правильно? Я прочитал документацию по tomcat, и мне кажется, что она должна.

2) Если нужно, не могли бы вы помочь мне с конфигурацией, чтобы все заработало?

Я пробовал решать другие вопросы по SO, но, похоже, ни одно из них не помогло.

Заранее спасибо!

3
задан 7 October 2016 в 13:46
1 ответ

1) Насколько я понимаю, что идентификатор сессии должен быть обновлен в резервной копии вскоре после того, как основной узел выйдет из строя? Я прочитал документы tomcat, и кажется, что так и должно быть.

Ответ: Нет, когда первичный узел падает, он падает. нет времени на то, чтобы поместить что-либо в резервную копию узла "I'm gonna crush". в документе Tomcat сказано, что он будет реплицировать кластер узлов сеанса. для той части, которая упомянула обновление, это значит, что он будет обновляться на всех узлах.(а не на том, который уже был раздавлен).

2) Если это необходимо, не могли бы вы помочь мне с конфигурацией, чтобы это заработало?

Ответ: N/A

1
ответ дан 3 December 2019 в 07:24

Теги

Похожие вопросы