簡體   English   中英

會話復制和集群中的tomcat?

[英]session replication and clustering in tomcat?

我已經配置了HttpServer2.2以實現Java應用程序的load balancingClustering

但是Load Balancing工作正常,而Clustering(session replication)無效。

我在HttpServer worker.properties是,

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>

在我的Tomcat one server.xml中,

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

在我的Tomcat two server.xmlTomcat 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並不了解當前用戶狀態及其存儲的應用程序會話對象。

希望我們的堆棧成員可以幫助我。

好的答案肯定會受到贊賞。

一些意見/建議

  • 您提到的配置純粹是負載平衡 我假設您在HttpServer后面使用Tomcat(在Tomcat中具有AJP連接器)。
  • HttpServer只會將請求轉發到Tomcat服務器。 它本身並不維護用戶的會話。
  • 會話在Tomcat維護,因此您應該為會話群集配置Tomcat
  • 對於Tomcat群集,請參考tomcat版本特定的文檔。 這是Tomcat 6.0會話群集的鏈接。
  • 將Tomcat服務器適當地集群后,將復制該會話,並且每台服務器將識別其他Server用戶的會話。

編輯:

在您的配置中,您提到的是

worker.balancer.sticky_session =True

這將使HttpServer將所有請求發送到第一次創建會話的tomcat( 該會話被卡在該服務器上,因此名稱為sticky session )。 這使您無法實現會話群集的目的。 請將此設置為false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM