mod_proxy_balancerで中〜大規模サーバー運用するときの勘所 – (2) ProxyPassディレクティブに渡すパラメーター編

Apache2.2から、ロードバランシングをしてくれるmod_proxy_balancer というモジュールが標準添付になりました。

このモジュール、その名前の通り、ApacheレベルでHTTPリクエストをバックエンドのサーバーに振り分けることでロードバランシングをしてくれるモジュールです。

Apacheの公式ドキュメントや試しに入れてみた人のBlogなどは散見されますが、実際の現場で運用している事例というのはまだ無いようです。

そこで、実際にピーク時にover 500 request/secでmod_proxy_balancerなサーバーを運用している経験をふまえ、つまずいた点などを公開していきたいと思います。

今回は、ProxyPassディレクティブに渡すパラメーターのチューニングについてです。前回までの設定ではhttpd.confに以下のように書いていたかと思います。

ProxyRequests Off
ProxyPass / balancer://cluster/

<Proxy balancer://cluster/>
BalancerMember http://192.168.1.1/ loadfactor=10
BalancerMember http://192.168.1.2/ loadfactor=10
</Proxy>

こう設定した場合、mod_proxy_balancerがフリーのワーカーを取得できなかった場合、フリーのワーカーを取得するまで待つのではなく、即座にクライアントにエラーを返してしまいます。

アクセス数が50 request/secぐらいまではこの設定で問題なかったのですが、150 request/secを超えたあたりから、フリーのワーカーが取得できないというエラーが頻発するようになりました。おそらく、ワーカーの生成が間に合ってないために発生していたものだと思われます。

なので、ワーカーの生成を2秒ほど待つように設定しました。

ProxyRequests Off
ProxyPass / balancer://cluster/ timeout=2

<Proxy balancer://cluster/>
BalancerMember http://192.168.1.1/ loadfactor=10
BalancerMember http://192.168.1.2/ loadfactor=10
</Proxy>

こう設定したことで、ワーカーが取得できないためにクライアントにエラーが返ることは無くなりました。

次回はBalancerMemberに渡すパラメーターについて解説します。

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>