1

mod_jkを使用してApache負荷分散ソリューションを構成しようとしています。クラスタリングは機能しますが、負荷分散は機能しません。

ラップトップでApachehttpd2.2サーバーを実行しています。2つのVMWare仮想マシンゲストオペレーティングシステムがあります。3つすべてがウィンドウです。VMwareマシンは、Webアプリケーションにサービスを提供するApacheTomcatServerをホストします。mod_jkを使用してhttpd.confファイルを構成し、ワーカー情報を使用してワーカープロパティファイルを構成しました。URLを使用してWebアプリケーションにアクセスできます:http://localhost/Web-application。一方のサーバーを停止すると、アプリケーションはもう一方のサーバーから提供されます。ただし、同時に両方ではありません。いくつかの抜粋を以下に示します。

httpd.confファイル:

LoadModule jk_module modules/mod_jk.so 
JkWorkersFile conf/workers.properties
JkLogFile "logs/mod_jk.log" 
JkLogLevel info
JkMount /MovieBooking loadbalancer
JkMount /MovieBooking/* loadbalancer

worker.propertiesファイル

workers.tomcat_home=/worker1
workers.java_home=$JAVA_HOME
worker.list=loadbalancer,jkstatus,worker1,worker2

 #Declare Tomcat server workers 1 through n

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2
worker.loadbalancer.sticky_session=1

worker.worker1.type=ajp13
worker.worker1.host=192.168.200.244
worker.worker1.port=8109
worker.worker1.lbfactor=1

worker.worker2.type=ajp13
worker.worker2.port=8109
worker.worker2.host=192.168.200.243
worker.worker2.lbfactor=1

worker.jkstatus.type=status

また、これらのサーバーのserver.xmlファイルにjvmrouteを設定しました。

Server.xml

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker1">         
     <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

さらに抽出物が必要な場合は、アップロードできます

4

2 に答える 2

1

スティッキーセッションを使用して負荷分散を構成した方法(私には問題ないように見えます)は、セッションが作成されると、後続の要求が同じTomcatインスタンスに送信されることを意味します。.worker1これは、またはを追加する必要があるセッションCookie値を確認することで認識できます.worker2。この接尾辞は、着信要求を送信するTomcatインスタンスを決定するためにApacheHTTPDによって使用されます。

セッションCookieがない場合、要求はラウンドロビン方式で使用可能なTomcat間で分散される必要があります。したがって、負荷分散をテストするには、通常、異なるセッションCookieを保持する複数のブラウザインスタンスが必要になります。または、すべてのリクエストがラウンドロビンスタイルで転送されるように設定sticky_session=falseしてみてください。

于 2012-08-30T12:15:46.660 に答える
1

apacheから

  • すべてのセッション属性はjava.io.Serializableを実装する必要があります
  • server.xmlのCluster要素のコメントを解除します
  • カスタムクラスターバルブを定義した場合は、ReplicationValveがあることを確認してください-server.xmlのクラスター要素の下にも罰金が科せられます
  • Tomcatインスタンスが同じマシンで実行されている場合は、tcpListenPort属性がインスタンスごとに一意であることを確認してください。ほとんどの場合、Tomcatは、4000〜4100の範囲の使用可能なポートを自動検出することで、これを独自に解決できるほど賢いです。Webを確認してください。 xmlには要素があります
  • mod_jkを使用している場合は、jvmRoute属性がエンジンで設定されていること、およびjvmRoute属性値がworkers.propertiesのワーカー名と一致していることを確認してください。
  • すべてのノードの時刻が同じであり、NTPサービスと同期していることを確認してください。ロードバランサーがスティッキーセッションモード用に構成されていることを確認してください。

まず、 jvmRouteに問題がないことを確認します

Session stickyness is not implemented using a tracking table for sessions. Instead each Tomcat instance gets an individual name and adds its name at the end of the session id. When the load balancer sees a session id, it finds the name of the Tomcat instance and sends the request via the correct member worker. For this to work you must set the name of the Tomcat instances as the value of the jvmRoute attribute in the Engine element of each Tomcat's server.xml. The name of the Tomcat needs to be equal to the name of the corresponding load balancer member. In the above example, Tomcat on host "myhost1" needs jvmRoute="worker1", Tomcat on host "myhost2" needs jvmRoute="worker2".

tomcat2jvmRouteは「worker2」である必要があります

于 2014-01-20T10:29:15.903 に答える