3

Java アプリケーションのとHttpServer2.2を実現するように を構成しました。load balancingClustering

しかし、正常に動作し、Load Balancing動作しClustering(session replication)ません。

worker.propertiesHttpServer場合は、

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の forTomcat 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の forTomcat 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現在のユーザーの状態と、アプリケーションの保存されたセッション オブジェクトについてはわかりません。

スタック メンバーがこれを手伝ってくれることを願っています。

良い答えは間違いなく高く評価されます。

4

2 に答える 2

5

いくつかのコメント/提案

  • あなたが言及した構成は、純粋に負荷分散に関するものです。HttpServer の背後で Tomcat を使用していると仮定します (Tomcat の AJP コネクタを使用)。
  • HttpServer は、リクエストを Tomcat サーバーにのみ転送します。それ自体は、ユーザーのセッションを維持しません。
  • セッションはTomcat で維持されるため、セッション クラスタリング用にTomcat を構成する必要があります。
  • Tomcat クラスタリングについては、Tomcat バージョン固有のドキュメントを参照してください。Tomcat 6.0 セッション クラスタリングへのリンクは次のとおりです。
  • Tomcat サーバーが適切にクラスター化されると、セッションが複製され、各サーバーは他のサーバーのユーザーのセッションを認識します。

編集:

あなたの構成であなたが言及している

worker.balancer.sticky_session =True

これにより、HttpServer は、セッションが初めて作成された tomcat にすべてのリクエストを送信します (セッションはそのサーバーにスタックされるため、 sticky session という名前が付けられます)。これは、セッション クラスタリングの目的に反します。これを false に設定してください。

于 2013-05-09T12:28:27.813 に答える