mod_proxy_balancer を使った案件のメモ

先日、はじめて mod_proxy_balancer を使用して
負荷分散対応させた案件があったのでメモをしておきます。


OS
CentOS 5.2
言語
PHP


before (3台構成)


・web サーバ
・DB サーバ
・backup サーバ


after (7台構成)


・Load Balancer
・web サーバ * 3
・DB サーバ * 2
・backup サーバ


というサーバ構成でした。


LVS を使うという選択肢も当初はありましたが、
Apache のモジュールである mod_proxy_balancer の実績も
十分にありそうなのでそちらを選択しました。


まず LB サーバに LoadModule を追加。

LoadModule proxy_module          modules/mod_proxy.so
LoadModule proxy_http_module     modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so


すでに多くの VirtualHost を使用しているプロジェクトであるため、
どのような記述をすればいいか迷いましたが、
/etc/httpd/ 以下に balance というフォルダを作成して、
その中に 80.conf と 443.conf を作成し、
各 VirtualHost 内で Include して、80のアクセスと443のアクセスを切り分けるようにしました。


SSL に関しては、本来リアルサーバ分の台数の証明書を取得しないといけないと思うのですが、
金銭的な理由やもろもろあり、特定の Web サーバ1台に飛ばすようにしました。
証明書自体は LB サーバに設置しておいて、LB サーバから特定の Web サーバへは80番での転送としました。
本来この方法だとこの特定のサーバが落ちた場合、冗長性がなくなるのですが、(それは LB が落ちたばあいも然り)
今回は、可用性よりもあくまで負荷を分散することが目的という SE の強い主張によりこうなりました。
あと、実際のところ、SSL に関しては他の方達はどのようにしているのかが気になりました。


次にリアルサーバにもともとのアクセスである環境変数が渡せるかが問題となりました。
これは結局、mod_rpaf というモジュールを利用することですべて解決できました。
また、このモジュールがあることで、リアルサーバ群の apache の conf ファイルも全サーバ共通となり、
本当にすべてを解決してくれました。


awstats を利用して、アクセス解析をしていたのですが、
これも LB への log を解析することで LVS のように merge 等をしなくてよかったのも嬉しかったです。


ということで、実際に mod_proxy_balancer での運用が始まったのですが、
特に今のところ大きな問題がなくてほっとしています。
いろいろと相談に乗っていただいた I さん、そして多くの方の blog の記事が参考になりました。
ありがとうございました。


参照:
http://www.res-system.com/weblog/item/618
http://www.onflow.jp/cyano/archives/99
http://www.drk7.jp/MT/archives/000573.html
http://blog.yappo.jp/yappo/archives/000352.html