2017-07-19 9 views
1

複数のTomcat JVMを単一のApacheクラスタで実行しています。 1つを除くすべてのJVMをシャットダウンすると、503秒になることがあります。再試行間隔を180分(retry = 10から)に増やすと、問題は解決します。それは私に を持って来ました、Apacheは停止したTomcat JVMをどうやって検出しましたか?私が に複数のJVMを含むクラスタがあり、そのうちのいくつかが停止している場合は、 Apacheはそれをどのように見つけますか?私が読んだところでは、Apacheは実際の 要求を使って、バックエンドのJVMの健全性を判断します。その場合、JVMが停止している場合、 要求が失敗します(5xx付き)。なぜ再試行値が高いのでしょうか 違いがありますか?あなたはpingの導入が助けになると思いますか?Apacheは停止したTomcat JVMをどのように検出しますか?

誰かがちょっと説明したり、私にある文書を指し示すことができたら、それはすばらしいでしょう。

Apache 2.4.10、mod_proxy、byrequests LBアルゴリズム、スティッキーセッション、 キープアライブがオン、すべてのバランサメンバーがttl = 300を使用しています。

ありがとうございます!

答えて

0

あなたの設定が実際に行っていることを少し調べて、次に役立つものに移行しましょう。

[docs]

retry - ここでは、「あなたが指定したものを、それ10または180設定しましいずれかの時間のapacheがあなたのバックエンドサーバをダウン検討しますので、彼にリクエストを送信しませんどのくらいです。値が高いほど、バックエンドが完全に立ち上がるまでの時間が長くなりますが、時間があれば-1サーバーなので、負荷を増やすことができます。

stickysession - すべてのセッションが何らかの理由でバックエンドサーバーを失った場合、エラーが発生します。

すべての今、我々はApacheのmod_proxyのはを内蔵ヘルスチェック機構を持っていないことを自分の状況レッツ明確に関連する変数を説明していること、それは本当の要求に応答に基づいてバックエンドのステータスを更新します。

だからあなたの現在の構成は、次のように動作します:

  • Apacheが生きているバックエンドに送信

    1. リクエストは、Apacheに到着
    2. 要求が応答をエラーHTTPコードを取得または取得できない場合応答はまったく、apacheはそのバックエンドをERROR状態にします。
    3. リトライ時間が経過すると、apacheはそのバックエンドサーバー要求を再度送信します。

    したがって、ダウンしているバックエンドサーバーに到達する最初のリクエストにはエラーページが表示されることを理解しています。

    あなたができることの1つは、実際にはpingです。ドキュメントによると、要求を送信する前にバックエンドをチェックします。もちろん、生成するオーバーヘッドを考慮してください。

    mod_proxy_ajpは、tomcatバックエンドフェールオーバーの検出に特別な機能(および構成のofc)を提供するように設定することをお勧めしますが、

  • +0

    : 'retry = 10'で' ping'を試みましたが、何の違いもありませんでした。私はまだ簡単に503エラーを再現できます。 'error.log'を見ている間に気づいたもう一つのこと。私が10個のTomcat JVMを持っていて、そのうち9個がダウンしていて、良いJVMがリストの7番目の位置にあります。 6つの停止したJVMに対して、Apacheは 'AH01114:HTTP:バックエンドへの接続を失敗しました:xxx'というエラーを以下のように出力します。しかし、要求は失敗しなかった。繰り返しますが、私が困惑するのは、 'retry = 180'または' retry = 60'を設定するとうまくいきます。 'retry = 10'では、90%の時間に失敗します。 – suv3ndu

    +0

    テストをどのくらいの期間実行しますか?リクエストを送信して900秒と言うことができますか? Plus ping: 'HTTPの場合、mod_proxy_httpは100-Continueをバックエンドに送信します(HTTP/1.1のみ有効 - バックエンド以外のHTTP/1.1の場合、このプロパティは無効です)。これはdocsのものです。 (私はあなたのバックエンドの横たわっているjvmのために何も知らない)。 – zochamx

    +0

    @zochmaxはい、mod_proxy_httpを使用しているので、 'ping'が動作します。すべてのテストを2〜3時間実行しました。この動作を理解するために、Apacheでより多くのログを記録する予定です。 – suv3ndu

    関連する問題