私は次の設定をしています:
レイヤー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:設定を確認したい場合はお知らせください
バックエンドのヘルスチェックを定義する必要があります。
処理のオーバーヘッドをあまりかけずに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で応答しない場合、サーバーはプールから取り出されます。再び正常に応答したときに追加されます。