mod_proxy、mod_proxy_balancer、および mod_status で apache2-worker パッケージを使用します。Apache は、WFS サーバーへのロード バランサー/ディスパッチャーとして構成されます。
OS: SuSE SLES 11 SP2
Apache httpd: バージョン 2.2.12
すべてのワーカー (WFS サーバー) は、一度に 1 つの要求しか処理できません。そのため/etc/apache2/server-tuning.conf
、セクション<IfModule worker.c>
では、パラメーターを に置きましServerLimit
た1
。BalancerMember の構成では、パラメーターを使用しましたmax=1
。つまり/etc/apache2/conf.d/proxy.conf
、次のようになります。
<Proxy balancer://wfscluster>
BalancerMember http://wfsserver01:9090 max=1 timeout=3600 acquire=30000
BalancerMember http://wfsserver01:9091 max=1 timeout=3600 acquire=30000
BalancerMember http://wfsserver02:9090 max=1 timeout=3600 acquire=30000
</Proxy>
ProxyPass /wfs balancer://wfscluster/ nofailover=On
パラメータacquire
:
ドキュメントには次のように記載されています。
設定すると、接続プールで空き接続を待機する最大時間 (ミリ秒単位) になります。プールに空き接続がない場合、Apache はクライアントに SERVER_BUSY ステータスを返します。
パラメータの私の理解はacquire
次のとおりであり、私の望ましい動作も次のとおりです。
ロード バランサーは、クライアントからいくつかの要求を受け取ります。ある時点で、すべての労働者は忙しいです。次のリクエストは、ワーカーが解放されるまでロード バランサーによって保留されたままになります。ワーカーがフリーになると、保留中のリクエストがフリー ワーカーに割り当てられ、フリー ワーカーが接続を受け入れます。パラメーターで指定された時間内に空いているワーカーがない場合acquire
、クライアントはエラー応答を受け取ります。
しかし、パラメーターacquire
は期待どおりに機能しません。ロード バランサーは次の要求を忙しいワーカーに割り当てます。その間に別のワーカーが解放されたとしても、リクエストは引き続きビジー ワーカーに割り当てられ、クライアントはビジー ワーカーが現在のリクエストを終了して新しいリクエストを受け入れるまで待たなければなりません。
実行すると/etc/init.d/apache2 reload
、Apache の error_log にエラー メッセージが表示されます。
BalancerMember 取得タイムアウトの形式が正しくありません
そのメッセージの後、httpd は終了します。httpd のみを開始または再起動すると、そのメッセージは表示されず、httpd は有効です。
のように単位も指定してみましたacquire=30000ms
。しかし、エラーは残ります。パラメータを削除するだけで解決しますacquire
が、説明されている動作は同じです。
質問は次のとおりです。
- パラメータをどのように使用する必要があります
acquire
か? 誰かが実用的な例を持っていますか? - 目的の動作を得るために他のパラメーターを使用する必要がありますか?