web-dev-qa-db-ja.com

クラッシュする可能性のあるTomcatバックエンドにサービスを提供する多くのApacheフロントエンドの前にあるレイヤー4ロードバランサー

私は次の設定をしています:

レイヤー4LBとして機能するHAProxy(リクエスト、パススルー、TCPモード)を複数のApacheフロントエンドに転送するだけ)これらのApacheフロントエンドはそれぞれトラフィックをTomcatバックエンドに送信しています。アプリケーションが実行されています。

現在、これらのtomcat /アプリケーションの1つがクラッシュした場合、対応するApacheフロントエンドはエラー503(これは正常です)を報告し、他は問題ありません。

問題は次のとおりです。HAProxyは(私の場合はソースIPに基づいて)各Apacheにランダムに負荷分散しているため、一部のユーザーは503エラー(Tomcatが機能していないことを指している)を受け取り、他のユーザーは機能している(問題のないTomcatを指している) )

何らかの方法でそれを検出する方法はありますか? (そして、ユーザーが動作中のフロントエンド/バックエンドにのみリダイレクトされるようにします)

hAproxyが「Apache」バックエンドに転送していて(ポート443が正常であると報告しているため)、実際のバックエンド(Tomcatサーバー)が表示されないため、HAproxy側では何もできないと思います。 Apacheフロントエンドで何かをしなければならないと思います(「503がある場合はApacheを停止する」など)。

これを処理する方法についてのアイデアはありますか?

ありがとう!

ps:設定を確認したい場合はお知らせください

1
olivierg

バックエンドのヘルスチェックを定義する必要があります。

処理のオーバーヘッドをあまりかけずにTomcatが処理できる簡単なリクエストを見つけてください。通常、/img/empty.gifのようなものが使用されます。ポイントは、これをチェックして、Tomcatが稼働しているときにHTTPステータス200を、Tomcatが機能していないときに他のエラーを表示できることです。

Haproxy.confを変更します。

listen app1 0.0.0.0:8080
  mode http
  option httpchk GET /img/empty.gif HTTP/1.0
  http-check expect status 200
  server backend1 10.0.0.1:443 check fall 3 rise 2 ssl verify none
  server backend2 10.0.0.2:443 check fall 3 rise 2 ssl verify none

追加する必要があるのは、option httpchk行とhttp-check行です。check行にはすでにserverがあると思います。

httpchkが実行されたときにサーバーがステータス200で応答しない場合、サーバーはプールから取り出されます。再び正常に応答したときに追加されます。

1
wurtel