vagrant-riak-clusterでノード3台をclusterするまでの手順

Riakのインストールは難しくないですが（binaryをインストールすればErlang runtimeもついてくるし）、
Vagrantは便利すぎるのでvagrant-riak-clusterを使うことに。
その作業ログを残しておきます。

以下、VirtualBoxおよびVagrantはインストールされているものとする。
（両者とも、公式からbinary installerをダウンロードしていれればいいと思う）
（Vagrant、最新はv1.2.4かと思います）


### まずは以下のリポジトリからgit clone

- [Github : vagrant-riak-cluster](https://github.com/hectcastro/vagrant-riak-cluster)

```

$ git clone https://github.com/hectcastro/vagrant-riak-cluster.git
```

直下にVagrantFileがあることを確認。
とりあえず起動したい人はVagrantFileのあるディレクトリにて`$ vagrant up`とすればVMが3つ立ち上がる。
この段階ではまだclusterにはなっていない。

このVagrantの構成は以下。

- VMが3つ作られる(ノード名：riak1 / riak2 / riak3)。VirtualBoxを起動すれば、3つできてるのが確認できる。
- それぞれメモリを1024M消費
- 消費メモリ変えたいときは  
`config.vm.provider(:virtualbox) { |v| v.customize ["modifyvm", :id, "--memory", 1024] }`  
の--memoryの値を変更
- boxはcentos6.4/ubuntu12.04から選択可能（デフォルトではUbuntuが選択される？）
- Riak用のcookbookは[basho/riak-chef-cookbook](https://github.com/basho/riak-chef-cookbook)
- BackendはBitcaskかeLevelDB（デフォルトはBitcask）
- 2i使いたくてeLevelDBにしたいときは、cookbookを書き換える必要がある。

```rb:https://github.com/basho/riak-chef-cookbook/blob/master/attributes/default.rb
# riak_kv storage_backend
default['riak']['config']['riak_kv']['storage_backend'] = "riak_kv_bitcask_backend"
```
cookbookをcloneしてローカルのcookbookを参照させる方法は以下。
[Berkshelfでcookbookの参照先を変える](http://qiita.com/taketon_/items/a43d49ab01746d9cd2dd)

- riak1ノードのみforwarded_portが設定されている。フォワードされているポートは以下

| port | protocol |
|-----------:|------------:|
| 8098 | HTTP |
| 8069 | HTTPS |
| 8087 | Protocol Buffer |

- 内部ネットワークが設定されていてそれによりノード間の通信が可能
- 内部ネットワークでのIPはそれぞれ以下のとおり

| Node Name | IP |
|-----------:|------------:|
| riak1 | 33.33.33.10 |
| riak2 | 33.33.33.20 |
| riak3 | 33.33.33.30 |

### clusterの設定

ということで、各ノードをcluster joinさせる。[riakdocs](http://docs.basho.com/riak/latest/quickstart/#Create-the-Cluster)

まずはriak1の状態を確認

```
$ cd vagrant-riak-cluster
$ vagrant ssh riak1
vagrant@riak1 $ sudo riak-admin member-status

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%      --      'riak@33.33.33.10'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

```

riak2, riak3からjoin

```
$ cd vagrant-riak-cluster
$ vagrant ssh riak2
vagrant@riak2 $ sudo riak-admin member-status

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%      --      'riak@33.33.33.20'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

vagrant@riak2 $ sudo riak-admin cluster join riak@33.33.33.10
Success: staged join request for 'riak@33.33.33.20' to 'riak@33.33.33.10'

```
(riak3については上記のriak2をriak3に変更)

riak1に戻って

```

vagrant@riak1 $ sudo riak-admin cluster plan
=============================== Staged Changes ================================
Action         Details(s)
-------------------------------------------------------------------------------
join           'riak@33.33.33.20'
join           'riak@33.33.33.30'
-------------------------------------------------------------------------------


NOTE: Applying these changes will result in 1 cluster transition

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

================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%     34.4%    'riak@33.33.33.10'
valid       0.0%     32.8%    'riak@33.33.33.20'
valid       0.0%     32.8%    'riak@33.33.33.30'
-------------------------------------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

WARNING: Not all replicas will be on distinct nodes

Transfers resulting from cluster changes: 42
  21 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.30'
  21 transfers from 'riak@33.33.33.10' to 'riak@33.33.33.20'


vagrant@riak1 $ sudo riak-admin cluster commit
Cluster changes committed
vagrant@riak1 $ sudo riak-admin member-status
================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid      34.4%      --      'riak@33.33.33.10'
valid      32.8%      --      'riak@33.33.33.20'
valid      32.8%      --      'riak@33.33.33.30'
-------------------------------------------------------------------------------
Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
```

できた！(((o(\*ﾟ▽ﾟ\*)o)))

### 確認

```
$ curl -v http://127.0.0.1:8098/riak/test/doc2
```
not foundって返ってきたら成功。