私は使用しています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アプリケーションの準備が完全に整うまでリダイレクトを防ぐために、この状況をどのように処理できますか?それらのステータスを確認するにはどうすればよいですか?
どんな助けでも大歓迎です。
おそらく最善のアプローチは、目的のコンテキスト(war)が完全に機能しているかどうかを確認し、failonstatus
ディレクティブを利用する方法を知っている一種のステータスサーブレットを構築することです。
もう1つのオプションは、デプロイメントで http://httpd.Apache.org/docs/2.2/mod/mod_proxy_balancer.html#balancer_manager を使用することです。手順は次のとおりです。