web-dev-qa-db-ja.com

Apache httpdワーカーが再試行します

Mod_proxyとmod_proxy_balancerを実行しているApache httpd Webサーバーがあります。/somedir全体が、ラウンドロビンスケジューラを使用してリクエストを処理する2つのワーカーマシンに送信されます。各ワーカーマシンは実行中IISですが、それは重要ではないと思います。

マシンのIPアドレスを含む単一のページを繰り返し要求することにより、ロードバランサーが機能していることを示し、予測可能なラウンドロビン方式であるページから別のページに切り替わることを確認できます。

IISサーバーの1つをオフにして同じページの要求を開始すると、各ページには稼働中のマシンのIPアドレスのみが含まれます。ただし、IISおよびmy IIS applicationを実行しない場合、/ somedirは500を返します(必要に応じて)。

Failonstatus(Apache 2.4)に500を追加したので、エラーが発生すると、Apacheはワーカーマシンをエラー状態にします。 Apacheはまだクライアントにプロキシエラーを返します。 Apacheにプロキシ障害をキャッチさせ、接続障害と同じ方法で別のワーカーを使用して再試行させるにはどうすればよいですか。

更新

StackOverflowでもほぼ同じ質問が寄せられるため、それらを結合します。

https://stackoverflow.com/questions/11083707/httpd-mod-proxy-balancer-failover-failonstatus-transperant-switching

7
David Newcomb

私はhttpdメーリングリストでDevと話しましたが、彼はこの機能が現在のコードベースに実装されていないことを確認しました。コードも自分で確認しました。 mod_proxy_balancer内のステートマシンはHTTPエラーで再試行できませんが、再試行できるのは接続エラーの場合のみです。自分で実装しようとしましたが、複雑すぎて、コードベースを簡単に不安定にする可能性があります。

したがって、この問題には今日の既知の解決策はありません...

4
Praveen

誰かが再びこの質問に遭遇した場合に備えて:failonstatusディレクティブはApache 2.2.27から実装されました。

<Proxy balancer://backends>
BalancerMember http://10.1.1.11
BalancerMember http://10.1.1.12
ProxySet failonstatus=500
</Proxy>

ログ:

[Thu Apr 28 03:13:06.176916 2016] [proxy_balancer:error] [pid 3285:tid 140231873353472] [client 10.1.1.1:43608] AH01174: balancer://puppetmaster: Forcing worker (http://10.1.1.12) into error state due to status code 500 matching 'failonstatus' balancer parameter
0
hajimuz