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クラスタ設定
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とかに増やしたりするだけで対処できる。おおっ、スケーラビリティ万歳!ブラボー って感じです。