YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

Riakの設定などをする

はじめに

こんにちは、Python界の情弱です。今日はPython Developers Festa 2012.03に来ています。Python最近書いてなさすぎでやばいので、Riakのクライアントを自作してみようかと思い、とりあえずRiakの環境をMBP上に構築しました。

参考

まずはThe Riak Fast Trackを読み進めながらやります。

The Riak Fast Track

Riakのインストール

まずはパッケージをインストールする。

% tar xzf riak-1.1.1.tar.gz
% cd riak-1.1.1
% make rel
% cd rel/riak
% ulimit -n 1024
% bin/riak start
% bin/riak-admin test
Successfully completed 1 read/write cycle to 'riak@127.0.0.1'
% bin/riak stop  
ok

ulimitは最低でも1024ないといけないのであらかじめ設定しておきます。テストも通ったので、次はコマンドで使ってみます。

複数ノードを立ててみる

ビルドができたのでThe Riak Fast Trackを読み進めます。

% make devrel
% cd dev; ls
dev1	dev2	dev3	dev4

これでテスト用のノードが4つ作成されました。そのうち3つ起動する。

% dev1/bin/riak start
% dev2/bin/riak start
% dev3/bin/riak start

dev2とdev3をdev1に追加してみる。

% dev2/bin/riak-admin join dev1@127.0.0.1
Sent join request to dev1@127.0.0.1
% dev3/bin/riak-admin join dev1@127.0.0.1
Sent join request to dev1@127.0.0.1

リングのstatsを確認してみる。色々出てくるけど、中で"ring_ownership"を確認すると、各ノード

  "ring_ownership": "[{'dev3@127.0.0.1',21},{'dev2@127.0.0.1',21},{'dev1@127.0.0.1',22}]",
  "ring_creation_size": 64,

パーティションサイズというのが何かは置いといて、リング全体のサイズが64で、各ノードで21, 21, 22と分担していることがわかる。さらにノードを1つ追加して、statsを見てみると

  "ring_ownership": "[{'dev4@127.0.0.1',16}, {'dev3@127.0.0.1',16}, {'dev2@127.0.0.1',16}, {'dev1@127.0.0.1',16}]",
  "ring_creation_size": 64,
テストでファイルを置いてみる

テストでcURL使ってHTTP PUTで画像ファイルを置いてみる。

% cp /Users/ymotongpoo/Pictures/test.jpg .
% curl -X PUT http://127.0.0.1:8091/riak/images/1.jpg \
-H "Content-type: image/jpeg" --data-binary @test.jpg

置いたことは http://127.0.0.1:8091/riak/images/1.jpg にアクセスして確認できた。

おまけ

Mac OS X用のRiakのビルド済みtar.gz入れたらめんどかった。
% tar xzf riak-1.1.1-osx-x86_64.tar.gz
% cd riak-1.1.1
% bin/riak start
% riak start
riak: line 5: cd: riak: Not a directory
!!!!
!!!! WARNING: ulimit -n is 256; 1024 is the recommended minimum.
!!!!
mkdir: /log: Permission denied
!!!!
!!!! WARNING: /log not writable; logs and crash dumps unavailable.
!!!!
egrep: /etc/vm.args: No such file or directory
vm.args needs to have either -name or -sname parameter.

勝手に/logとか期待してんじゃねえぞ、という話。