【緊急】 Riak Cloud Storage が OSS になりました【速報】

BashoのRiak CSオープンソースになり、さらに、同時に Riak CS 1.3.0 がリリースされました。Riak CSの日本語の紹介もあります。概要を知りたいというひとは第五回クラスト研の僕の発表スライドもよいかと思います。

今まではトライアル版と申しこめば無料で使えていましたが、これからはバグを見つけたりすると自分で直してPull Requestすることができるようになります。素晴らしいですね。Bashoジャパンで開発した機能もいくつか入っているらしいですよ。

ドキュメントにあまり時間をかけられなかったらしく(他人ごと)、公式のドキュメントもなかなかなので、ヒジョーにニッチなQuickStartをここに書いておきます。もう開発者向けといっていいレベル。Tarballも配布されると思うので特に心配はしていません。基本的には公式のQuickStartと同じですが、ちょいと長いので。

プロセス構成はクラスト研の資料にありますが、プロセスは3種類あります。

  • Riak (KVSそのもの)
  • Stanchion
  • Riak CS

起動する順番とビルドする順番が逆なのでややこしいのですが…Stanchionはどこかで1プロセスだけ動いていればよいです。まあ開発環境なのでローカルにひとりずつですね。

インストール

Erlang/OTPはR15B系をお使いください。R16Bはコンパイルできません。

RiakそのものはふつうのRPM何なりのやりやすいようにしておいてください。自分のやりやすい方法で。このブログを読みにくる方、それくらいできますよね!!!11(無茶
もしくはmasterから。3/20時点のやつでイケますね。

$ git clone git://github.com/basho/riak
$ cd riak && make stage

よくある手順だとdevrelとかになってたりしますが、それだとデフォルトのポート番号が他のヤツと合わないのであちこちでapp.configを変更しないといけなくなってオススメしません(僕はできなかった)。

次にRiak CSとStanchionをビルドします。GitHubからこのアドレスでとれるようになっているはず

$ git clone git://github.com/basho/riak_cs -b release/1.3
$ git clone git://github.com/basho/stanchion -b release/1.3
$ pushd riak_cs && make stage && popd
$ pushd stanchion && make stage && popd
$ ls riak_cs/rel/riak-cs/lib/riak_cs/ebin/riak_cs_kv_multi_backend.beam
/some/path/to/riak_cs/rel/riak-cs/lib/riak_cs/ebin/riak_cs_kv_multi_backend.beam

これでビルドは完了です。この絶対パスがあとで必要になります。

これでコンパイルとかインストール的なものは完了。

設定→起動

設定がまだヤヤコシイです。Riak CSがRiakに依存していますが、RiakにRiak CSの.beamの場所を教えてあげないといけない。RPMとかで入れると /etc/riak/app.config に設定ファイルがあるので、それを編集します。

まず、riak_coreセクションにVector Clocksを使う設定を入れる。

   {default_bucket_props, [{allow_mult, true}]},

次に、riak_kvセクションに storage_backend の設定があるので、それを書き換える。

  {add_paths, ["/some/path/to/riak_cs/rel/riak-cs/lib/riak_cs/ebin"]},
  {storage_backend, riak_cs_kv_multi_backend},
  {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]},
  {multi_backend_default, be_default},
  {multi_backend, [
      {be_default, riak_kv_eleveldb_backend, [
          {max_open_files, 50},
          {data_root, "/var/lib/riak/leveldb"}
      ]},
      {be_blocks, riak_kv_bitcask_backend, [
          {data_root, "/var/lib/riak/bitcask"}
      ]}
  ]},

これに失敗するとRiakも起動も起動しないので、Riakを起動した後はpingしておく。

# ulimit -n 65536
# riak start
# riak ping
pong
#

これでRiakが起動していたら成功。ちなみに、テストするときはここの異常もみるので

$ sudo riak attach
Attaching to /tmp//Users/kuenishi/src/riak/rel/riak/erlang.pipe.1 (^D to exit)


(riak@127.0.0.1)1>

とでもしておくとよい。

Stanchionは簡単だ。

$ ulimit -n 4096
$ cd path/to/stanchion
$ cd rel/stanchion
$ bin/stanchion start
$ bin/stanchion ping
pong

Riak CSは若干ややこしい。まず設定変更

$ ulimit -n 4096
$ cd path/to/riak_cs
$ cd rel/riak-cs
$ emacs etc/app.config

riak_cs

{anonymous_user_creation, false},

となっているところがあるので、これをtrueに変更する*1。で起動

$ bin/riak-cs start
$ bin/riak-cs ping
pong
$ bin/riak-cs attach
...

1>

コンソールも開いておきます。

最初のユーザーをつくる

これがわりとややこしかったりコケたりするところ。いまはlocalhostの8080をlistenしているのでそこにcurlでリクエスト

curl -H 'Content-Type: application/json' \
  -X POST http://localhost:8080/riak-cs/user \
  --data '{"email":"admin@admin.com", "name":"admin"}'
{"email":"admin@admin.com","display_name":"admin","name":"admin user","key_id":"5N2STDSXNV-US8BWF1TH","key_secret":"RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw==","id":"4b823566a2db0b7f50f59ad5e43119054fecf3ea47a5052d3c575ac8f990eda7"}

まあ名前は適当にかえてもよいです。ここで大切なのは key_id と key_secret のところ。これを使って本体にアクセスします。

最初のアクセス

s3cmdを使ってみます。

$ pip install s3cmd
$ s3cmd --configure

これで、Access KeyとSecretを入れたら

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: 

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't conect to S3 directly
HTTP Proxy server name [127.0.0.1]: 127.0.0.1
HTTP Proxy server port [8080]: 8080

このみっつの設定大事。httpsは使わないのと、http proxyの設定。何がおきているかというと、s3cmdをダマしてあたかもS3にアクセスしているかのように見せるためです。本当に商用で使う場合は s3.amazonaws.com 以外のドメインでも使えるように設定する方法もあります。バグ報告や修正などの開発にはほとんど必要ないので略。

$ s3cmd ls
$

となったら成功。ためしにデータを上げてみよう。

$ s3cmd mb s3://test
$ echo hogehoge > file.txt
$ s3cmd put file.txt s3://test
$ s3cmd get s3://test/file.txt -
hogehoge

となったら成功。もしかしたらstdoutに出てくる内容、プログレスバーに隠れてみてないかも。まあダメだったらs3cmdが盛大に例外を吐いてしんでくれるので -d で内容をみて間違いをみつけるかバグだったら報告してもらえればと。

ちなみに今は make test 通りません。hehehe

*1:これは認証なしでユーザー作り放題の実装なので普段はfalseにしておいて、adminつくるときだけtrueにします