風邪引いて寝込んでた。明日の花見行けるかなー。さて、Riakで少し遊んでみる。環境はAWSのマイクロインスタンス、OSはAmazon Linux、Riakのバージョンは1.3.0。まずはインストールから基本的な操作までやってみる。Riakって何だよ?って人はこのスライドがわかりやすいんで読んでいただくと。まぁ、Dynamo派生のデータストアだけあって、仕組みやコンセプトは俺/俺達を苦しめているCassandraと近い。



AWSの場合、一番簡単なのはaws marketplaceからのインストール。Riak入りのインスタンスが起動できる模様。しかしながら提供されているRiakちょっとバージョンが古かったので、今回は自前で構築することにした。

0. インスタンス起動とセキュリティグループ設定

インスタンスをぽちぽちと起動。Riakに関連するセキュリティグループは次の通り。

  • HTTPポートとProtcolBuffersポートは自分の家とEC2インスタンスのみから許可
    • TCP 8087:ProtocolBuffer通信用ポート
    • TCP 8088:HTTP通信用ポート
  • Riak同士がコミュニケーションするポートはEC2インスタンスのみから許可
    • TCP 8099:Hinted Handoff用ポート(※1)
    • TCP 4369:epmd (Erlang Port Mapper Daemon)用ポート(※2)
    • TCP 6000-7999:Riak同士がノード間通信に使うポート(※3)
      • ※1:ヒンテッドハンドオフというのは、本来データを書き込むべきノードが落ちていたとき、別のノードが本来データを格納すべきだったノードの情報(ヒント)とデータを保持しておく仕組み。Cassandraなどもこの仕組みを持っている。
      • ※2: Erlang力が低くてよくわかっていないんだけど、こういうものらしい(すまんね)。
      • ※3:おそらく、Gossipプロトコルを喋りあうポートなんじゃないかと。
1. インストール

大抵のOSはRPMやらdebやら公式のパッケージがあるのでそいつから入れるのが手っ取り早いと思う。Amazon Linux用はないっぽい?なのでRPM作っといた。まあソースからインストールでもいいんだけど。カスタムビルドに使ったspecファイルおよびオリジナルとのdiffはgistに上げといた。rpmとsrc.rpmはここに置いといた。

1
2
3
4
5
6
7
8
9
10
11
12
cd ~
wget http://s3.amazonaws.com/downloads.basho.com/riak/1.3/1.3.0/rhel/6/riak-1.3.0-1.el6.src.rpm
rpm -ivh riak-1.3.0-1.el6.src.rpm
sudo yum install rpm-build git erlang gcc gcc-c++

# specファイル編集
cd ~/rpmbuild/SPECS
vim riak.spec
rpmbuild -ba riak.spec

# インスコ
sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/riak-1.3.0-1.amzn1.x86_64.rpm

 

2. 設定&起動

ファイルディスクリプタをとりあえず4096に上げる(Amazon Linuxデフォルトの1024だと少ねーよって起動時に怒られるので)。そしてRiakの設定ファイル編集。どうやら/etc/riak/app.configと/etc/riak/vm.argsが設定ファイルのようだ。app.configは下記の箇所が127.0.0.1になっているので、ここを全解放(0.0.0.0)にしておく(アクセスコントロールはAWSのセキュリティグループの設定に任せる)。pb_ipはプロトコルバッファのバインドアドレス、http/httpsはREST APIのバインドアドレス。vm.argsの「-name」はクラスタ環境でのノードの名前になると思われる。ここは自分のIPにしておく。

・/etc/riak/app.config

1
2
3
4
5
6
7
8
{riak_api,
{pb_ip,   "0.0.0.0" },
{pb_port, 8087}

{riak_core, [

{http, [ {"0.0.0.0", 8098 } ]},
%{https, [{ "0.0.0.0", 8098 }]},

・/etc/riak/vm.args

1
-name riak@xxx.xxx.xxx.xxx

で、起動&停止。呼吸をするように起動スクリプトを叩くだけ。

1
2
3
4
5
/etc/init.d/riak start

/etc/init.d/riak stop

# 停止しても/usr/lib64/riak/erts-5.8.5/bin/epmd -daemonってプロセスが残ってしまう(おれが理解に乏しいErlangのアレか...)けど、一旦気にしない...

3. コマンドラインユーティリティを使ってみる

riakコマンドや、riak-adminコマンドがある。どうやら、riak-adminコマンドでクラスタの管理(参加/削除etc)を行うようだ。Cassandraでいうとnodetoolコマンドのような感じ。適当にいろいろ叩いてみる。

・死活監視コマンド:riak ping

pongが返ってくる

・クラスタのメンバ情報取得:riak-admin member-status

まだ一台しかないからこんな感じ。

1
2
3
4
5
6
================================= Membership ==================================
Status Ring Pending Node
-------------------------------------------------------------------------------
valid 100.0% -- 'riak@xxx.xxx.xxx.xxx'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

・リングの情報:riak-admin ring-status

1
2
3
4
5
6
7
8
9
10
================================== Claimant ===================================
Claimant: 'riak@xxx.xxx.xxx.xxx'
Status: up
Ring Ready: true

============================== Ownership Handoff ==============================
No pending changes.

============================== Unreachable Nodes ==============================
All nodes are up and reachable

・vnodeの情報:riak-admin vnode-status

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Vnode status information
-------------------------------------------

VNode: 0
Backend: riak_kv_bitcask_backend
Status:
[{key_count,0},{status,[]}]

VNode: 22835963083295358096932575511191922182123945984
Backend: riak_kv_bitcask_backend
Status:
[{key_count,0},{status,[]}]

〜略〜

・パフォーマンス情報:riak-admin top

MongoDBでいうとmongotopのような。パフォーマンスモニタみたいな感じ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
===============================================================================================================================
'riak@xxx.xxx.xxx.xxx' 07:02:07
Load: cpu 0 Memory: total 21998 binary 73
procs 1454 processes 7643 code 8630
runq 0 atom 987 ets 1081

Pid Name or Initial Func Time Reds Memory MsgQ Current Function
-------------------------------------------------------------------------------------------------------------------------------
<5750.116.0> riak_core_vnode_manager '-' 7491925 64176 0 gen_server:loop/6
<5750.3.0> erl_prim_loader '-' 1555326 88344 0 erl_prim_loader:loop/3
<5750.330.0> riak_kv_entropy_manager '-' 1264810 147136 0 gen_server:loop/6
<5750.126.0> riak_core_claimant '-' 752091 21512 0 gen_server:loop/6
<5750.26.0> code_server '-' 673962 88304 0 code_server:loop/1
<5750.54.0> memsup '-' 530944 55000 0 gen_server:loop/6
<5750.25.0> file_server_2 '-' 502616 3896 0 gen_server:loop/6
<5750.117.0> riak_core_capability '-' 396853 8736 0 gen_server:loop/6
<5750.111.0> riak_core_ring_manager '-' 229548 21512 0 riak_core_gen_server:process_next_msg/9
<5750.73.0> timer_server '-' 165318 2784 0 gen_server:loop/6

 

4. 参考

 

2 Responses to Riak 01 インストール/基本操作

  1. あましょー より:

    手順1の「sudo yum install rpm-build git erlang gcc gcc-c+」の
    gcc-c+はgcc-c++ではないでしょうか

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">

Set your Twitter account name in your settings to use the TwitterBar Section.