web-dev-qa-db-ja.com

Apache mod_proxy_balancer + Tomcatロードバランシング-Webアプリケーションの準備が整うまでリダイレクトしないでください

私は使用していますApache2mod_proxyおよびmod_proxy_balancer負荷を4つの別々のTomcat8異なるサーバー上のインスタンスに分散します。 Tomcatインスタンスごとに異なる[〜#〜] ajp [〜#〜]ポートを使用し、TomcatでjvmRouteディレクティブを使用していますserver.xml、このように:最初のインスタンス:

<Connector port="[port1]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat1">

2番目のインスタンス:

<Connector port="[port2]" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="Tomcat2">

等々。

Apache2構成では、次のようにクラスターを定義します。

<Proxy balancer://myCluster>
        BalancerMember ajp://[ip1]:[port1] route=Tomcat1 loadfactor=1
        BalancerMember ajp://[ip2]:[port2] route=Tomcat2 loadfactor=1
        BalancerMember ajp://[ip3]:[port3] route=Tomcat3 loadfactor=1
        BalancerMember ajp://[ip4]:[port4] route=Tomcat4 loadfactor=1

        ProxySet lbmethod=bybusyness
        ProxySet stickysession=JSESSIONID

        Order Deny,Allow
        Deny from none
        Allow from all
 </Proxy>

そしてproxypassディレクティブ:

ProxyPass / balancer://myCluster/
ProxyPassReverse / balancer://myCluster/
...

期待どおりに機能し、必要に応じて負荷分散を行います。Tomcatインスタンスがダウンしている場合、ロードブランサーはそのインスタンスにリダイレクトしません。この時点まで、すべてが正常に機能しています。

しかし、問題は、Tomcatインスタンスでデプロイメントをトリガーするときに、それらを1つずつ停止し、新しいアーティファクトをアップロードして、インスタンスを再起動することです。ただし、ロードバランサーは、Webアプリケーションアーティファクトがデプロイされ、初期化され、準備が整う前でも、Tomcatインスタンスをリダイレクトします。そのため、まだ準備ができていないURLにリクエストを送信すると、ユーザーは空白の画面に直面します。

Webアプリケーションの準備が完全に整うまでリダイレクトを防ぐために、この状況をどのように処理できますか?それらのステータスを確認するにはどうすればよいですか?

どんな助けでも大歓迎です。

1
Utku Özdemir

おそらく最善のアプローチは、目的のコンテキスト(war)が完全に機能しているかどうかを確認し、failonstatusディレクティブを利用する方法を知っている一種のステータスサーブレットを構築することです。

もう1つのオプションは、デプロイメントで http://httpd.Apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager を使用することです。手順は次のとおりです。

  • ワーカーを無効にする
  • デプロイ
  • それがアップするのを待つ/チェックする
  • ワーカーを有効にする
1
zeridon