ひとりでやるRiak Advent Calendar 2012 day1 - 入門

Riakは、オープンソースの分散キー・バリュー・ストアでゴニョゴニョ、ライセンスはApache2.0というのはおいといて、とりあえず入れてみよう。

f:id:kuenishi:20121201131429p:plain

ソースから入れる

ソースから入れるときは、準備としてErlang/OTPが必要。いろいろ方法があるのだけど、今では大抵のOSのパッケージ管理システムからインストールすることができるので、その方法に従ってください。ErlangのバージョンはR14B03以上がオススメです。R15B02は公式にはサポートされていないけど、まあぶっちゃけ僕もR15B02を使っている。

$ escript
escript: Missing filename
$ erl
Erlang R15B02 (erts-5.9.2) [source] [64-bit] [smp:4:4] [async-threads:0] [hipe] [kernel-poll:false]

こんな感じになっていれば大丈夫。特にR15B02のところが新しいこと、64bitになっていることくらいかな。リリース版がほしいひとはダウンロードセンターからtar玉を落としてくる。今日の時点だと1.2.1が最新版なので、GitHubからでもとってこれる。

$ git clone git://github.com/basho/riak
$ cd riak
$ git checkout 1.2.1

まあmasterでも大して変わらないのでそんなに気にすることはない。で、動く環境をビルドする

$ make rel
$ ulimit -n 1024

このmakeはGNU makeじゃないと動かないので、*BSDの人は注意。ulimitの設定はたいていの分散システムでは常識かと思う。ぼくのテスト環境はMacなので、楽にやろうとすると1024までしか最大FD数をふやせなかったきがする。Linuxなどだと4096まではユーザー権限でいけた記憶があるから、増やしておいた方がよい。これで設定までできているので、次はさっそくRiakを起動する

$ cd rel/riak
$ bin/riak start

何の音沙汰もなく10秒ほどでコントロールが返ってきたら多分成功だ。20秒くらいだとタイムアウトしているかもしれなくて失敗だとおもわれる。起動しているかどうかを確認するためには

$ bin/riak ping
pong

となっていればよい。動いている様子をじーっと観察していたければ

$ bin/riak-admin member-status
$ bin/riak-admin ring-status

などとするのもよい。おかしなことがあればログを掘るのがよい。ログは log/ というディレクトリに出てくるが正直読みやすいものではないので、少しでもおかしくなっているようだったら rel/riak のディレクトリをすべて削除して make rel をやり直すのがよい。

パッケージから入れる

rpm, debなどはファイルがあるのでダウンロードしてくるとよい。FreeBSDだと pkg_add で簡単に入るようだ。そのとき設定ファイルは /etc/ に入るようだ。ディストリビューション依存の方法は楽だが削除ややり直しが大変であるし、環境によって方法が違う上にソースからの動作がユーザー空間だけで簡単にできるので、とりあえず動かしてみる目的であれば推奨しない。本番環境に使うときはそれらのパッケージを使った方がデプロイツールなどと相性がよいだろう。

動かす

起動に成功していれば、既にHTTPポートが開いているのでちょっと試しに叩いてみることができる。

$ curl http://localhost:8098/riak/test  | python -mjson.tool
{
    "props": {
        "allow_mult": true, 
        "basic_quorum": false, 
        "big_vclock": 50, 
        "chash_keyfun": {
            "fun": "chash_std_keyfun", 
            "mod": "riak_core_util"
        }, 
        "dw": "quorum", 
        "last_write_wins": false, 
        "linkfun": {
            "fun": "mapreduce_linkfun", 
            "mod": "riak_kv_wm_link_walker"
        }, 
        "n_val": 3, 
        "name": "test", 
        "notfound_ok": true, 
        "old_vclock": 86400, 
        "postcommit": , 
        "pr": 0, 
        "precommit": , 
        "pw": 0, 
        "r": "quorum", 
        "rw": "quorum", 
        "small_vclock": 50, 
        "w": "quorum", 
        "young_vclock": 20
    }
}

/riak/test というリクエストはいろいろな設定情報を返してくれる。ブラウザで http://localhost:8098/ を開いてみるといろいろ変なリンクができていると思う。これでまあRiakがとりあえず起動したことは確認できる。

GUI

しかし私は軟弱なのでGUIを使う。riak_controlというイカしたWeb UIがあるのだ。それを使うためには etc/app.config というファイルをちょっと変更しなければならない。

$ emacs etc/app.config

まずは、生のHTTPではなくHTTPSを使うようにしないといけない。 riak_core というセクションがあるので

-   {http, [ {"127.0.0.1", 8098 } ]},
+   {https, [{ "127.0.0.1", 8098 }]},
+   {ssl, [
+          {certfile, "./etc/cert.pem"},
+          {keyfile, "./etc/key.pem"}
+         ]},

それっぽいところがあるのでコメントアウトするのでもよい。証明書を変えたければここで指定するファイルを変更すればよい。次に riak_control というセクションがあるので

-    {enabled, false},
+    {enabled, true},

ユーザー名やパスワードを複数作りたいときはすぐ下に userlist というエントリがあるので適当に書き換えればよい。それで再起動すればよいが、1.2系だとrestartコマンドは正常に動作しないのでstartストップする。

$ bin/riak stop; bin/riak start

これで、ブラウザを使って https://localhost:8098/ にアクセスする。 admin_* のようなリンクが沢山増えていると思う。admin_gui をクリックするとかっこいい画面に飛ぶことと思う。どうですか?ぼくはmasterブランチでやってみたらどうやらバグがあるらしく出て来なかったのだけど、1.2.1でやったらちゃんとできた。

f:id:kuenishi:20121118223316p:plain

分散環境で動かすためには

app.configを見ればわかると思うが、このままだとデフォルトのポートはすべてループバックアドレスをlistenしてしまう。そのためローカルマシンからしかアクセスすることができない。これを外からでも見えるようにするためには、 etc/app.config と etc/vm.args に 127.0.0.1 と書いてあるところをすべてそのマシンのIPアドレスで書き換えること。 0.0.0.0 にしてもよいところとしてはいけないところに分かれているので、基本的にはそのネットワークで定義されているIPアドレスにしなければならない。
ちなみにIPv6は1.3以降のバージョンから動く、かもしれない。

まとめ

とりあえず起動するところまで。これでとりあえず、罠っぽいところは回避できているはず。