CentOS5上でRuby on RailsアプリをApacheで動かす

最近は

勉強会参加者の8割が「Apache2.2 + mod_proxy_balancer + mongrel(cluster)」という構成で運用していた。これが現在の日本の Rails 運用のデファクトぽいので、迷ったらこの構成がよいだろう。

参考URL
http://wota.jp/ac/?date=20070520#p03

らしいので、「Apache2.2 + mod_proxy_balancer + mongrel(cluster)」を構築してみる。
導入も手軽でスピードも結構速いらしい。

バージョンは以下

Apache 2.2
Mongrel 1.1.1
Mongrel 1.0.5

RailsとGem, Apacheはインストールされているものとする。

Mongrelインストール

本体インストール
gem install mongrel
クラスターインストール
gem install mongrel_cluster
クラスタ設定ファイルを作成
mongrel_rails cluster::configure -p 3000 -N 4
クラスタ起動
cd ROOT_APP_DIR
mongrel_rails cluster::start
クラスタ停止
mongrel_rails cluster::stop

めちゃめちゃ簡単だった。。。
これで以下URLでアクセスができる。
http://localhost:3000
http://localhost:3001
http://localhost:3002
http://localhost:3003

今度はこのURLに負荷分散するようApache2.2をインストールする

Apache2.2の設定

次にロードバランサーとなるApacheの設定

ロードバランサの設定は、
http://d.hatena.ne.jp/kusakari/20071011/1192072268
からの引用です。

# cd /etc/httpd/conf
# cp -ap httpd.conf httpd.conf.orig
# vi 
-----
<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com

  DocumentRoot /home/rails_projects/exam/public
  <Directory "/home/rails_projects/exam/public">
               Options FollowSymLinks
               AllowOverride None
               Order allow,deny
               Allow from all
  </Directory>

  RewriteEngine On

  RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f
  RewriteRule (.*) $1 [L]

  ProxyRequests Off

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

  ProxyPass / balancer://mongrel_cluster/ stickysession=_exam_session_id nofailover=On
  ProxyPassReverse / balancer://mongrel_cluster/
  <Proxy balancer://mongrel_cluster/>
    BalancerMember http://127.0.0.1:3000 route=0
    BalancerMember http://127.0.0.1:3001 route=1
    BalancerMember http://127.0.0.1:3002 route=2
    BalancerMember http://127.0.0.1:3003 route=3
  </Proxy>
</VirtualHost>
-----

# /etc/rc.d/init.d/httpd restart