TOPシステム開発> mod_proxy_balancerの設定方法
まるごとPerl!
事例編〜Web 2.0サービスの中を見せます

第5回:サーバの追加とロードバランシング
著者:はてな  伊藤 直也   2006/10/30
前のページ  1  2
mod_proxy_balancerの設定方法

   mod_proxy_balancerを使ったリバースproxyの設定は以下のようになります。

   まず、コンパイル時にmod_proxy_balancerを有効にしてください。先ほどのコンパイルオプションに、リスト3のように--enable-proxy-balancerのオプションを追加すればOKです。
リスト3:mod_proxy_balancerを有効にする
$ ./configure --prefix=/usr/local/httpd_docs \
(省略)
--enable-proxy-balancer
(省略)

   次いでApacheの設定です。先ほどのmod_rewriteの設定をリスト4のように書き換えます。

リスト4:mod_rewriteの設定を変更
<Proxy balancer://bookmark>
BalancerMember http://192.168.0.10 loadfactor=10
BalancerMember http://192.168.0.11 loadfactor=10
</Proxy>

RewriteEngine on
RewriteRule ^/images/ - [L]
RewriteRule ^/css/ - [L]
RewriteRule ^/(.*)$ balancer://bookmark/$1 [P,L] ----(1)

   <Proxy>…</Proxy>の中に、BalancerMemberとして複数構えるアプリケーションサーバーのURIを指定します。ここでは192.168.0.10と192.168.0.11が2台のアプリケーションサーバーのアドレスであると想定した設定になっています。

   URIの後ろにあるloadfactorパラメータは、負荷分散の割合を調整するパラメータです。ここでは両者を同一の値にしているので、それぞれ1/2の確率で振り分けが行われます。この値に差をつけることで他方の受け取り確率を上げたりすることも可能です。アプリケーションサーバーのそれぞれのマシンスペックに差がある場合などに役立つことでしょう。詳しくはマニュアルを参照してください。

   そして、バックエンドへの転送の設定を(1)のように記述します。Proxyディレクティブで指定したbalancer://bookmarkというURIがRewriteRuleの中で利用でき、そのURIはBalancerMemberで指定したURIとして展開される、という具合です。分かりやすいですね。

   新たにアプリケーションサーバーを一台追加する場合は、BalancerMemberにそのサーバーのURIを追加するだけで完了です。Webサーバーを増設するのは簡単だというのがお分かりいただけるかと思います。


リバースproxyは増設しなくて良いのか

   ところで、アプリケーションサーバーを増設するのが簡単なのは分かったとして、リバースproxyの負荷が高くなったらどうするの? と思われた方もいるかもしれません。

   実は、リバースproxyの負荷はそうそう高くはならないので増設の必要性があまりない、というのがその答えです。はてなブックマークは現在月間5,000万PVですがリバースproxyはまだ1台で、リソース的にもまだまだ余裕があります。もちろんリバースproxyのハードウェアもPentium 4で組まれたごくごく普通のPCサーバーです。

   さて、リバースproxyはそう慌てて増設しなくても良いわけですが、1台ですと故障したときに困りますね。いわゆる、そこが故障するとサービスが止まってしまう箇所SPOF(Single Point Of Failure)です。これに対する対応策はいろいろあって、例えば、

  • もう1台、同じ構成の待機サーバーを用意する。故障したらそれと交換する
  • リバースproxyの手前にハードウェアのロードバランサーあるいはソフトウェアのバランサーを置き、リバースproxyを複数台にする

   といったことが考えられます。本稿執筆時点2006年6月において、はてなブックマークでは前者の方法を取っています。より耐障害性を高めるのであればリバースproxyの手前のバランサーは冗長性を確保できるものが良いでしょう。ソフトウェアであれば、例えばUltraMonkeyなどが利用できるのではないかと思います。

   なお2006年10月現在はこの構成を変更し、後者のLinuxのLVSという、カーネルモジュールとして動作するソフトウェアロードバランサを用いてリバースproxyの冗長性確保を行っています。またkeepalivedという別のソフトウェアと組み合わせることでLVS自身の耐障害性を高めることも行っています。

前のページ  1  2

株式会社はてな 伊藤 直也
著者プロフィール
株式会社はてな  伊藤 直也
取締役最高技術責任者
ブログサービスやソーシャルブックマークなど、はてなの各種サービスの企画、開発を行う。著書に「BlogHacks」(オライリージャパン刊)。「続・初めてのPerl」(オライリージャパン)、「Perl救命病棟」(翔泳社刊)では監訳を務めた。


INDEX
第5回:サーバの追加とロードバランシング
  Webサーバーの追加とロードバランシング
mod_proxy_balancerの設定方法