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に渡すパラメーターについて解説します。