Riakを使ってみる¶
今までまったく使ったことないのに、なんとなく Riak meet up や Riak Source Code Reading に参加表明してみたりしたので、Riak を使ってみる。
FreeBSDで使う¶
残念ながらportsにはないようで。 Download からbinaryパッケージ は取れるけど、makeする。
% curl -O
http://s3.amazonaws.com/downloads.basho.com/riak/1.2/1.2.1/riak-1.2.1.tar.gz
% gzip -dc riak-1.2.1.tar.gz | tar xvf -
% cd riak-1.2.1
% gmake rel # gmake必須
でOK。もちろん、erlangは事前にインストール済み。あと、gitも必要。
起動¶
% ./rel/riak/bin/riak start
% ./rel/riak/bin/riak ping
pong
status¶
% ./rel/riak/bin/riak-admin
================================= Membership =========
Status Ring Pending Node
------------------------------------------------------
valid 100.0% -- 'riak@127.0.0.1'
------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
設定¶
app.config¶
rel/etc/app.config にある。
重要なところとしてはこの二つかな。
port指定
{riak_api, [ {pb_ip, "{{pb_ip}}" },
backend DBの指定
{riak_kv, [ {storage_backend, riak_kv_eleveldb_backend},
クラスター¶
一つのマシンでもクラスター試せる。
# devrelを指定するとdev以下にインスタンスが4つコピーされる
% make devrel
# 起動(4つあるけど今回は三つ使う)
% ./dev/dev1/bin/riak start
% ./dev/dev2/bin/riak start
% ./dev/dev3/bin/riak start
# Clusterにjoinさせる
% ./dev/dev2/bin/riak-admin cluster join dev1@127.0.0.1
% ./dev/dev3/bin/riak-admin cluster join dev1@127.0.0.1
# Success: staged join request for 'dev2@127.0.0.1' to 'dev1@127.0.0.1'
# とか出たら成功
この状態では
% ./dev/dev1/bin/riak-admin member-status
================================= Membership ==================
Status Ring Pending Node
---------------------------------------------------------------
joining 0.0% -- 'dev2@127.0.0.1'
joining 0.0% -- 'dev3@127.0.0.1'
valid 100.0% -- 'dev1@127.0.0.1'
---------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:2 / Down:0
となってる。 Joiningとなってるね。
ここで、Ringのメンテナンスを行う
% bin/riak-admin cluster plan
# NOTE: Applying these changes will result in 1 cluster transition
# などずらずらっと出て、
% bin/riak-admin cluster commit
# Cluster changes committed
# で完了。
%./dev/dev1/bin/riak-admin member-status
================================= Membership ====
Status Ring Pending Node
-------------------------------------------------
valid 20.3% 32.8% 'dev2@127.0.0.1'
valid 17.2% 32.8% 'dev3@127.0.0.1'
valid 62.5% 34.4% 'dev1@127.0.0.1'
-------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
落としてみる¶
# アー!
% kill -9 92074
%./dev/dev1/bin/riak-admin member-status
================================= Membership======
Status Ring Pending Node
--------------------------------------------------
valid 32.8% -- 'dev2@127.0.0.1'
valid 32.8% -- 'dev3@127.0.0.1'
valid 34.4% -- 'dev1@127.0.0.1'
--------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
# あれ…?
% ./rel/riak2/bin/riak attach
No running Erlang on pipe
/tmp//home/hoge/src/riak-1.2.1/rel/riak2/erlang.pipe.1: Device not configured
%./rel/riak2/bin/riak ping
pong
# なんで返ってくるんだ…?
%./rel/riak2/bin/riak-admin test
Successfully completed 1 read/write cycle to 'riak2@127.0.0.1'
うーん、なぞ。
追記¶
その後、 @itawasa さんに相談したところ、かなり勘違いをしていたことが分 かりました。
実はrun_erl(riak-1.2.1/dev/dev2/erts-5.9.2/bin/run_erl)をkillしてたんで すね。でも、このrun_erlは単なる呼び出しスクリプトであり、killするならば erlang VM自体、つまり [beam.smp] を落とす必要がありました。
ということで、killしたところ、ちゃんと返ってこなくなりました。大変失礼 しました。
Comments
comments powered by Disqus