dockerで5台構成のRiakをサクッと試す

[Running a Riak service - Docker Documentation](http://docs.docker.io/en/latest/examples/running_riak_service/)の一番最後のNext Stepsのところだけ試したメモです。

[Why Your Riak Cluster Should Have At Least Five Nodes | Basho](http://basho.com/why-your-riak-cluster-should-have-at-least-five-nodes/)によると開発環境では3台構成でもよいけど、プロダクション環境では最低5台構成が良いらしいです。

なるべくプロダクションと同じ構成で普段から挙動を見ておきたいと考えるならば、開発環境も5台構成で試しておきたいところです。

でもVirtualBoxで5つもVM作るのはMacBook Airではきついですよね。dockerなら5台構成でも簡単です。

dockerの環境は[MacOSX - OSX, Vagrant, VirtualBoxでdockerを試す - Qiita \[キータ\]](http://qiita.com/hnakamur/items/4cf9e59e16c7692a0dc4)の手順で予めセットアップ済みとします。

あとは[hectcastro/docker-riak](https://github.com/hectcastro/docker-riak)の手順通り実行します。

## セットアップ

```shell-session
$ sudo apt-get install -y git curl make sshpass
$ git clone https://github.com/hectcastro/docker-riak.git
$ cd docker-riak
$ make
$ make riak-container
```

## Riak起動

```shell-session
vagrant@precise64:~/docker-riak$ make start-cluster
./bin/start-cluster.sh
Started [riak1] and assigned it the IP [33.33.33.10]
Started [riak2] and assigned it the IP [33.33.33.20]
Requesting that [riak2] join the cluster..
Success: staged join request for 'riak@33.33.33.20' to 'riak@33.33.33.10'
Started [riak3] and assigned it the IP [33.33.33.30]
Requesting that [riak3] join the cluster..
Success: staged join request for 'riak@33.33.33.30' to 'riak@33.33.33.10'
Started [riak4] and assigned it the IP [33.33.33.40]
Requesting that [riak4] join the cluster..
Success: staged join request for 'riak@33.33.33.40' to 'riak@33.33.33.10'
Started [riak5] and assigned it the IP [33.33.33.50]
Requesting that [riak5] join the cluster..
Success: staged join request for 'riak@33.33.33.50' to 'riak@33.33.33.10'
=============================== Staged Changes ================================
Action         Details(s)
-------------------------------------------------------------------------------
join           'riak@33.33.33.20'
join           'riak@33.33.33.30'
join           'riak@33.33.33.40'
join           'riak@33.33.33.50'
-------------------------------------------------------------------------------


NOTE: Applying these changes will result in 1 cluster transition

###############################################################################
                         After cluster transition 1/1
###############################################################################

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%     20.3%    'riak@33.33.33.10'
valid       0.0%     20.3%    'riak@33.33.33.20'
valid       0.0%     20.3%    'riak@33.33.33.30'
valid       0.0%     20.3%    'riak@33.33.33.40'
valid       0.0%     18.8%    'riak@33.33.33.50'
-------------------------------------------------------------------------------
Valid:5 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

Transfers resulting from cluster changes: 51
  12 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.50'
  13 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.40'
  13 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.30'
  13 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.20'

Commit these cluster changes? (y/n): y
Cluster changes committed
vagrant@precise64:~/docker-riak$
```

起動状態をdocker psで確認します。

```shell-session
vagrant@precise64:~/docker-riak$ sudo docker ps
ID                  IMAGE                    COMMAND                CREATED             STATUS              PORTS
124ab8d89f5d        hectcastro/riak:latest   /usr/bin/supervisord   11 seconds ago      Up 11 seconds       49184->8087, 49185->8098, 49186->22   
d83f8daf6c5e        hectcastro/riak:latest   /usr/bin/supervisord   16 seconds ago      Up 15 seconds       49181->8087, 49182->8098, 49183->22   
400c498b644c        hectcastro/riak:latest   /usr/bin/supervisord   19 seconds ago      Up 19 seconds       49178->8087, 49179->8098, 49180->22   
603b0e6c4892        hectcastro/riak:latest   /usr/bin/supervisord   23 seconds ago      Up 23 seconds       49175->8087, 49176->8098, 49177->22   
f073cb8850c8        hectcastro/riak:latest   /usr/bin/supervisord   27 seconds ago      Up 26 seconds       49172->8087, 49173->8098, 49174->22
```

## 値の設定と取得のテスト

[Basic Riak API Operations](http://docs.basho.co.jp/riak/latest/tutorials/fast-track/Basic-Riak-API-Operations/)を参考に試してみました。

まず、値の設定を試します。

```shell-session
vagrant@precise64:~/docker-riak$ curl -v -d 'this is a test' \
> -H "Content-Type: text/plain" \
> http://33.33.33.10:8098/riak/test/doc
* About to connect() to 33.33.33.10 port 8098 (#0)
*   Trying 33.33.33.10... connected
> POST /riak/test/doc HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: 33.33.33.10:8098
> Accept: */*
> Content-Type: text/plain
> Content-Length: 14
> 
* upload completely sent off: 14out of 14 bytes
< HTTP/1.1 204 No Content
< Vary: Accept-Encoding
< Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
< Date: Sun, 22 Sep 2013 16:00:01 GMT
< Content-Type: text/plain
< Content-Length: 0
< 
* Connection #0 to host 33.33.33.10 left intact
* Closing connection #0
vagrant@precise64:~/docker-riak$
```

値を取得してみます。値の最後に改行がないのでプロンプトと繋がっていますが、正しく取得できています。

```shell-session
vagrant@precise64:~/docker-riak$ curl http://33.33.33.10:8098/riak/test/doc
this is a testvagrant@precise64:~/docker-riak$
```

値を削除して消えたことを確認。

```shell-session
vagrant@precise64:~/docker-riak$ curl -v -X DELETE http://33.33.33test/doc/riak/ 
* About to connect() to 33.33.33.50 port 8098 (#0)
*   Trying 33.33.33.50... connected
> DELETE /riak/test/doc HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: 33.33.33.50:8098
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Vary: Accept-Encoding
< Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
< Date: Sun, 22 Sep 2013 16:01:18 GMT
< Content-Type: text/plain
< Content-Length: 0
< 
* Connection #0 to host 33.33.33.50 left intact
* Closing connection #0
vagrant@precise64:~/docker-riak$ curl http://33.33.33.10:8098/riak/test/doc
not found
vagrant@precise64:~/docker-riak$
```