2009-12-22
_ ROMAをちょっとだけ手軽に起動する
この記事はRuby Advent Calendar jp: 2009の22日目です. 前日はtakano32さんで, 明日はursmさんです.
ROMAに付いてのTIPSを書いてみましょう.
ROMAといえば,楽天が作っているRubyで書かれたDHT(分散ハッシュテーブル)です. 先日github上で公開されたので,試してみた方,試してみたい方もいらっしゃるのではないでしょうか.
私がROMAを動かしてみて思ったのは,起動が若干面倒だということ. ドキュメントを見てもらえば分かりますが, 他のROMAノードがまだ存在しない場合,
% bin/mkroute localhost_11211 host01_11212 --enabled_repeathost % bin/romad host01 -p 11211 --enabled_repeathost % bin/romad host01 -p 11212 --enabled_repeathost
のように起動前にルーティング情報を生成する必要があります.
また,すでに存在するROMAのネットワークに新しいノードを追加する場合には,
% bin/romad roma02 -p 11211 -j host01_11211
のように,現在動いているノードのアドレスとポートを指定してあげなければいけません.
tribunus
このような起動方法が面倒だったので,ROMAを手軽に起動するためのツール "tribunus" を作ってROMAのリポジトリに紛れ込ませてあります(これ).
使い方
動いているtribunusが何もない場合,
% bin/tribunus -c host01 11211-11215
のように "-c" オプションを付けます.ポートは範囲で指定すると,複数のプロセスが立ち上がります.
すでにtribunusが他のホストで動いている場合,
% bin/tribunus -d host02 12345-12347
"-d" オプションを付けます. これで,勝手に他のノードを探してROMAネットワークに参加します.
何をしているか
"-c"を付けた時は,単純にmkrouteしてから,romadを子プロセスとして立ち上げます.
tribunusは動いている間UDPのパケットを待っています. なので,"-d"を付けて起動したときは,他のtribunusにマルチキャストを行います. そして返事として,動いているromadのアドレスとポートを受け取ります. それを使って子プロセスのromadをネットワークに参加させます.
CAUTION
tribunusはruby1.9.2じゃないと動きません. 新しいSocket APIを使っているためです. まあ,クリスマスには1.9.2がリリースされるだろうからいいだろう,と高を括って使ってみたら, リリース延期ということで. その内1.9.1でも使えるように直します.
という訳で,ROMAを使ってみた方はtribunusを使ってみてはいかがでしょうか.