2008年10月01日
mongrel_clusterのメモでまとめたとおり
mongrel_clusterは
- 単に複数mongrel_railsの起動を起動管理
- 設定をYAML形式で記述可能
- フォアグラウンドでは起動させられない

daemontoolsを導入するに辺り、
fghackを使ってmongrel_clusterを管理すると言うてがあるのだろうけど、
自分はmongrel_clusterを使わない事にした。
mongrel_clusterが何をやっているのかを知ってからは、
mongrel_clusetr対する熱がすっかり冷めてしまったのだ…。
課題
何を解決しなければ行けないのかを上げてみる
- serversの扱いをどうするのか
- YAMLの設定項目はどのように設定するか
解決策
daemontoolsをある程度使っている人ならば恐らく当たり前な事。
- serversの数だけserviceを作成
- YAMLの設定項目はenvdirで設定する

作業内容
サービス追加
# cd /servie/ # ./addsv.sh mongrel_cluster-0※addsv.shはdaemontoolsの/service/に、サービスを追加するスクリプト「addsv.sh」 を参照。
runファイル設定
# cd /service/.mongrel_cluster-0 # vi runここではenvuidgidではなく、USERとGROUPを指定する。
管理の都合など、どうしてもUSERで指定するアカウントで環境変数を指定したいと言う方はenvuidgidを使って下さい。
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH
exec 2>&1
sleep 10
exec envdir ./env sh -c '
[ -d "${CHDIR}" ] || exit 1
id "${USER}" || exit 1
exec mongrel_rails start \
-e ${ENVIRONMENT:-DEVELOPMENT} \
-a ${ADDRESS:-127.0.0.1} \
-p ${PORT:-3000} \
-c ${CHDIR} \
-r ${ROOT:-public} \
--user ${USER} \
--group ${GROUP} \
'
envdirディレクトリ作成# mkdir env # cd envenvdir用ファイル作成
# echo 127.0.0.1 > ADDRESS # echo /var/lib/rails/project/ > CHDIR # echo production > ENVIRONMENT # echo www-data > GROUP # echo 8080 > PORT # echo rails > USERrunの確認
# cd ../ # sh -n ./run # sh -x ./run問題無ければサービス対象にする
# cd /service # mv -i .mongrel_cluster-0 mongrel_cluster-0同じ作業を繰り返し、
ノード名とPORTファイルの設定が違うmongrelサービスのノードを増加させて行く。
| ノード名 | env/PORT |
| /service/mongrel_cluster-0 | 8080 |
| /service/mongrel_cluster-1 | 8081 |
| /service/mongrel_cluster-2 | 8082 |
| /service/mongrel_cluster-3 | 8083 |
あくしゅ!はこの仕組みで管理してます。
まとめ
mongerel_clusterを使わないメリット。
- daemontoolsにより、プロセスが異常終了しても起動してくれる
- グループの中の特定ノードだけ起動停止が可能になる
- ログの扱いはmultilog任せ
daemontoolsは素敵です。