Ubuntu7.10でmod_proxy_balancer + mongrel_cluster

Railsで何かつくれるようになりたい私が自宅サーバを構築した以上、流れはこうなるに決まってるわけです。はい。mod_proxy_balancer + mongrel_cluster行ってみましょう。

インストール

まずはインストールから。

apt-get install mongrel
gem install mongrel_cluster

なんだかよくわかんないけど、gemではmongrelインストールできず、apt-getでできた。
それと、mongrel_clusterはapt-getではできずにgemだとできた。。 ようわからん。

Mongrelクラスタ設定

動かしたいRailsアプリのディレクトリに移動して、

mongrel_rails cluster::configure -e production -p 8010 -N 4 --prefix /test

これで、config/mongrel_cluster.ymlという以下のようYAMLファイルができる。

---
  prefix: /test
  log_file: log/mongrel.log
  port: "8010"
  environment: production
  pid_file: tmp/pids/mongrel.pid
  servers: 4

つまり、/testというパスで8010から4ポートすなわち8010-8013ポートでmongrelがてぐすね引いて待っててくれるようになる。と。

Mongrelクラスタ起動・停止・再起動

このファイルを確認して、まあ、ひつようなら書き換えるなどしたら、以下で起動したり止めたり再起動したりできる。

mongrel_rails cluster::start
mongrel_rails cluster::stop
mongrel_rails cluster::restart

こうやって立ち上げた状態で、http://example.com:8011/testなどとアクセスするとRailsの画面が出てくるですよ。

Apache mod_proxy_balancer

ただ、これだけだとSSLとかバーチャルホストとかできないので、apacheのvirtual host設定部分に以下のような記述を追記する。

DocumentRoot /srv/www/test.example.com/
ProxyRequests Off

<proxy *>
  Order deny,allow
  Allow from all
</proxy>

ProxyPass /test balancer://mycluster1 lbmethod=byrequests
ProxyPassReverse /test balancer://mycluster1

<proxy balancer://mycluster1>
  BalancerMember http://127.0.0.1:8010/test loadfactor=10
  BalancerMember http://127.0.0.1:8011/test loadfactor=10
  BalancerMember http://127.0.0.1:8012/test loadfactor=10
  BalancerMember http://127.0.0.1:8013/test loadfactor=10
</proxy>

そうすると、ちゃんと外からのリクエストを4人のmongrel君たちが分担して担ってくれるようになった。

やったね^^/

まあ、私の自宅サーバなんかが大負荷になることはまずないだろうけど(除プログラムバグ)、もし人気サイトをつくっちゃったりして負荷がきつくなってきたら、4つのmongrel君を8とかに増やしたりするだけで対処できる。おおっ、スケーラビリティ万歳!ブラボー って感じです。