2008年10月01日

mongrel_clusterを使わず、似たような事をdaemontoolsで実現させる

livedoorClipに登録 | このエントリーをはてなブックマークに追加 | del.icio.usに登録 | MM/Memoに登録

mongrel_clusterのメモでまとめたとおり


mongrel_clusterは
  • 単に複数mongrel_railsの起動を起動管理
  • 設定をYAML形式で記述可能
  • フォアグラウンドでは起動させられない

mongrel_cluster


daemontoolsを導入するに辺り、
fghackを使ってmongrel_clusterを管理すると言うてがあるのだろうけど、
自分はmongrel_clusterを使わない事にした。

mongrel_clusterが何をやっているのかを知ってからは、
mongrel_clusetr対する熱がすっかり冷めてしまったのだ…。


課題


何を解決しなければ行けないのかを上げてみる
  • serversの扱いをどうするのか
  • YAMLの設定項目はどのように設定するか
こんな所だろう。


解決策


daemontoolsをある程度使っている人ならば恐らく当たり前な事。
  • serversの数だけserviceを作成
  • YAMLの設定項目はenvdirで設定する
図解するとこうなる。

mongrel_cluster


作業内容


サービス追加
# 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 env
envdir用ファイル作成
# echo 127.0.0.1 > ADDRESS
# echo /var/lib/rails/project/ > CHDIR
# echo production > ENVIRONMENT
# echo www-data > GROUP
# echo 8080 > PORT
# echo rails > USER
runの確認
# cd ../
# sh -n ./run
# sh -x ./run
問題無ければサービス対象にする
# cd /service
# mv -i .mongrel_cluster-0 mongrel_cluster-0
同じ作業を繰り返し、
ノード名とPORTファイルの設定が違うmongrelサービスのノードを増加させて行く。

ノード名env/PORT
/service/mongrel_cluster-08080
/service/mongrel_cluster-18081
/service/mongrel_cluster-28082
/service/mongrel_cluster-38083


あくしゅ!はこの仕組みで管理してます。


まとめ


mongerel_clusterを使わないメリット。
  • daemontoolsにより、プロセスが異常終了しても起動してくれる
  • グループの中の特定ノードだけ起動停止が可能になる
  • ログの扱いはmultilog任せ
デメリットは…考えない。
daemontoolsは素敵です。


関連リンク



トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔