репликация сеанса и кластеризация в tomcat?

Я настроил HttpServer2.2 для достижения load balancing и Clusteringдля моего Java-приложения.

Но Load Balancing работает нормально, а Clustering(session replication) не работает.

Моя worker.properties в HttpServer будет,

workers.java_home=C:/Program Files/Java/jdk1.6.0_25

#worker.list=worker1,worker2
worker.list=balancer

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.worker2.port=8019
worker.worker2.host=192.168.100.84
worker.worker2.type=ajp13
worker.worker2.lbfactor=1

worker.balancer.type=lb
worker.balancer.balance_workers=worker1,worker2
worker.balancer.method=B
# Specifies whether requests with SESSION ID's 
# should be routed back to the same #Tomcat worker.
worker.balancer.sticky_session =True

и httpd.conf будет,

<IfModule jk_module>

JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info

JkMount /CustomerChat_V1.02.00 balancer
JkMount /CustomerChat_V1.02.00/* balance

</IfModule>

В моем server.xml для Tomcat one,

<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.8"

            port="45564"
            frequency="500"
            dropTime="3000" />

        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="auto"
              port="4200"
              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;.*\.jpg;.*\.htm;.*\.html;.*\.txt;" />

     <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
           tempDir="D:/cluster/temp/war-temp/"
           deployDir="D:/cluster/temp/war-deploy/"
           watchDir="D:/cluster/temp/war-listen/"
           watchEnabled="false" />

     <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

     <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

В моем server.xml для Tomcat two,

       <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.0.1"
                  port="4100"
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6" />

Но все еще есть проблема.

Когда я отключу Tomcat one, новый запрос будет автоматически отправлен на tomcat two. Но Tomcat two не знает о текущем состоянии пользователя и его сохраненном объекте сеанса приложения.

надеюсь, члены нашего стека помогут мне в этом.

Хорошие ответы, безусловно, приветствуются.


person Human Being    schedule 09.05.2013    source источник


Ответы (1)


Некоторые комментарии/предложения

  • Упомянутая вами конфигурация предназначена исключительно для балансировки нагрузки. Я предполагаю, что вы используете Tomcat за HttpServer (с разъемом AJP в Tomcat).
  • HttpServer только перенаправит запрос на сервер Tomcat. Сам он не поддерживает сеанс пользователя.
  • Сеансы поддерживаются в Tomcat, поэтому вам следует настроить Tomcat для кластеризации сеансов.
  • Информацию о кластеризации Tomcat см. в документации по конкретной версии Tomcat. Вот ссылка для кластеризации сеансов Tomcat 6.0.
  • Как только серверы Tomcat будут сгруппированы соответствующим образом, сеанс будет реплицирован, и каждый сервер будет распознавать сеанс пользователей другого сервера.

ИЗМЕНИТЬ:

В вашей конфигурации вы упоминаете

worker.balancer.sticky_session =True

это заставит HttpServer отправлять все запросы на кота, на котором сеанс был создан в первый раз (сеанс привязан к этому серверу, отсюда и название sticky session). Это противоречит вашей цели кластеризации сеансов. Пожалуйста, установите для этого параметра значение false.

person Santosh    schedule 09.05.2013
comment
Спасибо за ваш ответ ... Я попробовал ваш ответ и обновил свой вопрос. Пожалуйста, проверьте его и дайте мне знать об изменениях. - person Human Being; 09.05.2013
comment
Пожалуйста, проверьте журналы запуска обоих серверов и посмотрите, не приходят ли какие-либо журналы, связанные с настройкой кластера. Любая конфигурация, которую вы ставите, кажется мне правильной. - person Santosh; 09.05.2013
comment
Все другие ресурсы сказали мне оставить worker.balancer.sticky_session =True и есть ли еще предложения? - person Human Being; 10.05.2013