CentOS に Kestrel をインストールして試す 1
環境: CentOS5.5
Kestrel は Twitter謹製のメッセージキューサーバー。
特徴は
- 速い → JVM上で動く。
- 小さい → scalaで約2,500行。nettyを使ってる。
- 耐障害性 → メッセージを失わないようファイルシステムにジャーナルを記録している。
- 信頼性 → キューから取り出したメッセージの処理漏れを防ぐことができる。
とのこと。
また kestrel との通信は3つのプロトコルが用意されている。
- memcache: the memcache protocol, with some extensions
- thrift: Apache Thrift-based RPC
- text: a simple text-based protocol
前準備
Java をインストールしておく。
インストール
ここからビルド済みバイナリをダウンロードする。
http://robey.github.com/kestrel/
現在最新の kestrel 2.3.1 を落としてきた。
$ wget http://robey.github.com/kestrel/download/kestrel-2.3.1.zip $ unzip kestrel-2.3.1.zip
設定ファイルはconfディレクトリにある。
$ ls -l kestrel-2.3.1/config development.scala production.scala
サーバ起動
$ cd kestrel-2.3.1 $ sudo java -jar kestrel_2.9.1-2.3.1.jar & [1] 9672
ログファイルを確認する。
デフォルトでは /var/log/kestrel に出力されている。
起動時のログは以下のこんな感じ。
$ less /var/log/kestrel/kestrel.log INF [20120719-16:59:56.538] stats: Starting LatchedStatsListener INF [20120719-16:59:57.025] admin: Starting TimeSeriesCollector INF [20120719-16:59:57.043] admin: Admin HTTP interface started on port 2223. INF [20120719-16:59:57.050] kestrel: Kestrel config: listenAddress=0.0.0.0 memcachePort=Some(22133) textPort=Some(2222) queuePath=/var/spool/kestrel expirationTimerFrequency=Some(1.seconds) clientTimeout=None maxOpenTransactions=100 connectionBacklog=None INF [20120719-16:59:57.263] kestrel: Starting up background expiration task. INF [20120719-16:59:57.277] kestrel: Starting background-expiration INF [20120719-16:59:57.379] kestrel: Kestrel 2.3.1 started.
4つのポートを使っている。
memcacheListenPort -> 22133
textListenPort -> 2222
thriftListenPort -> 2229
admin.httpPort -> 2223
このへんはさきほどの設定ファイルで設定している。
2223のAdmin画面は現状なにも用意されていない。今後追加するかもってメッセージが書いてあるだけ。
動作確認
http://yuroyoro.hatenablog.com/entry/20090803/1249297348
を参考に memcached プロトコルを使ってキューにメッセージを入れたり出したりしてみる。
telnetコマンドで接続。
$ telnet localhost 22133 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'.
memcached コマンドは以下フォーマット
set <キー> <フラグ> <有効期間> <サイズ>
2つメッセージをキュー入れる。
キー名は foo とする。
memcached のキー名が、kestrel のキュー名に相当。
set foo 0 0 3 aaa STORED set foo 0 0 4 bbbb STORED
今度はキューから2つのメッセージを取り出す。
get foo VALUE foo 0 3 aaa END get foo VALUE foo 0 4 bbbb END
問題なく動作した。
/var/log/kestrel ディレクトリに foo というバイナリファイルができていた。
これがジャーナルなのかな。
サーバを落として終了。
kill 9672
参考:
http://samuraism.jp/diary/2011/11/20/1321770660000.html
http://blog.asial.co.jp/875