February 24, 2004

リバースプロキシ Pound を導入しました。

[ Linux & UNIX , 自宅サーバ ]

Pound を導入してみました。Pound はウェブサーバ用のリバースプロキシです。(ロードバランサやHTTPSアクセラレータとしての機能もあります。) GPL で配布されています。

昨年10月の Shibuya.pm竹迫さんが "mod_perl における C10K problem" というテーマで講演されたのですが、その中で Pound が取り上げられており、今度使ってみようと思ってはや半年、ようやく導入しました。導入にあたっては、竹迫さんの Shibuya.pm での資料が大変役に立ちました。Good Job すぎです。

Pound 導入前は、Apache + mod_perl なサーバひとつで全リクエストを処理していたのですが、Pound のリバースプロキシ機能を使って以下のような構成にしました。二つの Apache を異なるポートで動かしておき、Pound が静的コンテンツ、mod_perl による動的コンテンツそれぞれにリクエスト先を切り替えるという、オーソドックスなもの。竹迫さんのプレゼンでは静的コンテンツ用のサーバに、Esehttpd がおすすめされていましたが、とりあえずは使い慣れているものということで無難に Apache 1.3系を選択してみました。

pound.gif

プログラムの組み方が悪かったのか、mod_perl を組み込んだサーバがメモリを異常に食いつぶしていて、サーバが悲鳴をあげていたのですが、今回 Pound を導入したことによってかなり状況が改善されました。

mod_perl 環境では、Apache の各プロセス上にコンパイル済みの Perl プログラムが常駐するのですが、それが原因で httpd のサイズが大きくなりがちです。そのため、MaxClients の値を大きくしている場合に多くのリクエストを受けた場合、大量にメモリを消費する httpd をたくさん fork してしまい、結果スラッシングが発生して処理能力が極端に低下します。そこで、MaxClients の数を絞って最大プロセス数を少なくすることでメモリを節約するわけですが、そうすると今度は大量のリクエストを同時に裁くことができなかったり、KeepAlive を On にしづらくなったりと、犠牲が伴います。

これらの問題を解決するのがリバースプロキシの役目。詳しくは竹迫さんの資料を見ていただくとして、図のような構成をとることにより、静的なコンテンツは httpd をたくさん並べつつ KeepAlive を On にして裁きつつ、必要ならバックエンドの mod_perl サーバにリクエストを転送し、動的コンテンツを返却させる、ということが可能です。(Tomcat を裏で動かして表側で Apache が静的コンテンツを返し mod_jk2 で繋ぐというサーブレットな構成と似たようなものです。)

僕のサーバの場合、先日導入した Apache::GTopLimit のオーバヘッドが結構あったみたい(MRTGで観測したところ、導入直後から idle がギリギリになってしまいました)ですが、Pound 導入後はこれも落ち着きました。

Pound はサイズも小さく、利用方法も簡単で導入しやすいのが良いです。mod_proxy や Squid、Delegate などのリバースプロキシ比較表なんかも竹迫さんの資料にありますので、興味のある方は是非ご覧ください。

どのぐらい効果があったかを推測せずに、観察する必要があるのですが、その辺りの手法に自分が疎いことに気付きます。ということで、その辺を調べていくのが今後の課題です。

Posted by naoya at February 24, 2004 01:19 AM | トラックバック (5)  b_entry.gif
トラックバック [5件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/891
リバースプロキシPound
Excerpt: NDO::Weblog: リバースプロキシ Pound を導入しました。 Pound を導入してみました。Pound はウェブサーバ用のリバースプロキシです。(ロードバランサやHTTPSアクセラレータとしての機能もあります。) GPL で配布されています。リバースプロキシのPound。1〓2ヶ月前のSo...
Weblog: p0t
Tracked: February 24, 2004 10:10 AM
リバースプロキシを導入する際はmod_rpaf
Excerpt: 僕の自宅サーバには2つの Apache がインストールされていて、用途により使い分けています。* Apache 1.3系 + mod_perl → Amazon...
Weblog: Drk7jp
Tracked: September 3, 2004 10:39 PM
POUND リバースプロキシ
Excerpt: drk7.jpさんのリバースプロキシを導入する際はmod_rpafを経由して NDO::WebBlogさんのリバースプロキシ Pound を導入しました。をメモ...
Weblog: blog.nomadscafe.jp
Tracked: September 4, 2004 11:58 PM
tux
Excerpt: 本日某サーバーにテスト的にtuxを導入してみる。カーネルモードで動くWEBサーバーです。動作は劇早です。静的コンテンツはtuxが処理して、動的(PHP)とかへの...
Weblog: PHP-Jブログ
Tracked: November 13, 2004 01:08 AM
Linux/Reverse-Proxy
Excerpt: Linux Reverse Proxy Reverse Proxy http://murashima.net/rio/delegate_ssl...
Weblog: Jicoo Corp. PukiWiki plus (PukiWiki/TrackBack 0.3)
Tracked: August 3, 2005 04:10 PM
コメント [3件]

うちのサーバーも同じ状況です。

Pound + Apache2 (stat) + Apache1.3 (dynamic)

という構成にしたいのですが、httpd.confをいじるのが面倒で、先送りになっています…。

とりあえずはメモリー増設でしのごうかと、ちょっとヒヨっています。

[1] Posted by: nob seki at February 24, 2004 10:54 AM [返信]

seki さん

mod_perl が悲鳴上げられてるようですね。Pound導入は、やり始めると結構あっさりなのでぜひおためしを。メモリ買って組み込む費用を考えると、多分 Pound を試す時間の方が安くすむはず。(笑)

[2] Posted by: naoya at February 25, 2004 01:16 AM [返信]

この返信があったころ、ついポチっとメモリーを買ってしまいました…。

しかし装着するときに、きっと一緒にpoundの設定もしてしまうような気がします…。

[3] Posted by: nob seki at February 26, 2004 01:19 AM [返信]