1

Apache/Tomcat のセットアップ:

            Apache
              |
             / \
           /     \
         C1       C2           Clusters
         |         |
        / \       / \
      /     \   /     \
     T1     T2  T3     T4      Tomcats
  • Windows Server 2012
  • アパッチ 2.2.25
  • mod_jk 1.2.20
  • トムキャット 7.0.42

C1 と C2 で負荷分散を行っています。T1 と T2 はグループで、T3 と T4 は別のグループです。C1 と C2 は独立しています。

ワーカー.プロパティ:

worker.list=jkstatus,Cluster1,Cluster2,C1T1,C1T2,C2T1,C2T2
worker.jkstatus.type=status

# Configuration Cluster 1
worker.Cluster1.type=lb
worker.Cluster1.balance_workers=C1T1,C1T2

worker.C1T1.port=8119
worker.C1T1.host=localhost
worker.C1T1.type=ajp13
worker.C1T1.lbfactor=1
worker.C1T1.redirect=C1T2

worker.C1T2.port=8129
worker.C1T2.host=localhost
worker.C1T2.type=ajp13
worker.C1T2.lbfactor=1
worker.C1T2.redirect=C1T1

# Configuration Cluster 2
worker.Cluster2.type=lb
worker.Cluster2.balance_workers=C2T1,C2T2

worker.C2T1.port=8219
worker.C2T1.host=localhost
worker.C2T1.type=ajp13
worker.C2T1.lbfactor=1
worker.C2T1.redirect=C2T2

worker.C2T2.port=8229
worker.C2T2.host=localhost
worker.C2T2.type=ajp13
worker.C2T2.lbfactor=1
worker.C2T2.redirect=C2T1

Apache は、次のようにすべてのリクエストをCluster1またはCluster2にリダイレクトします。

JkMount /MyApp/* Cluster1

server.xml :

<Engine name="Catalina" defaultHost="localhost" jvmRoute="C1T1">
    <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="45562" frequency="500" dropTime="3000"/>
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
                <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4001" autoBind="100" selectorTimeout="5000" maxThreads="6"/>
            <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=""/>
        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>

    <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    </Realm>

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
</Engine>

T1/T2 は同じアドレス/ポートを持ち、T3/T4 は同じアドレス/ポートを持ちます (T1/T2 とは異なります)。

私はこれに従いました: http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.htmlとこれ: http://tomcat.apache.org/connectors-doc/reference/workers.html

負荷分散はうまく機能します。クラスター上の 1 つの Tomcat をシャットダウンすると、Apache はすべての要求を他の Tomcat にリダイレクトします。セッションも複製されます (JConsole を使用して、両方の Tomcat でアクティブなセッションの数を追跡しました)。

さて、ここに私の問題があります:

F5 を押すたびに、新しいセッションが作成されます (私は@SessionBeanTomcat で使用しています)。HTTP ポートで Tomcat に直接アクセスしてクラスターをバイパスすると、新しいセッションが作成されますが、F5 キーを押しても新しいセッションは作成されません。

Apache でアクセスすると、リクエストごとに新しいセッションが作成される理由 (およびその修正方法!) を知りたいです。

4

1 に答える 1

0

最後にそれを理解しました。

クラスタリングはこれを引き起こしませんでした。それは JSF の JSESSIONID cookie でした。そのパスは(apache forward to )/MyApp/ではなくでした。///MyApp/

編集:Tomcats()のファイルに次のように設定sessionCookiePath="/"する必要がありました:<Context ...></Context>conf/context.xml

<Context sessionCookiePath="/">
    ...
</Context>
于 2013-12-04T20:30:12.890 に答える