Riak2.0.0preをつかってみた

Riak2.0.0pre11を使ってクラスターを構築してみました。
使用したマシンは3台で全てCentOS6.4です。

## 1. riakのインストール

yumでバイナリパッケージをインストールします。

```zsh:zsh
yum install http://s3.amazonaws.com/downloads.basho.com/riak/2.0/2.0.0pre11/rhel/6/riak-2.0.0pre11-1.el6.x86_64.rpm
```

たったこれだけ。

## 2. サーバ証明書の作成

riak付属の管理用webインターフェイスを使うのにサーバ証明書が必要なので、
オレオレ証明書を作っておきます。
※管理用webを使わないなら不要です。

```zsh:ssl
% cd /etc/riak
# サーバのprivateキーを作成
% openssl genrsa -des3 -out key.pem 1024
# privateキーを使ってCSRを作成
% openssl req -new -key key.pem -out cert.csr
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyoとか
Locality Name (eg, city) [Default City]:区とか
Organization Name (eg, company) [Default Company Ltd]:会社名
Organizational Unit Name (eg, section) []:部署
Common Name (eg, your name or your server's hostname) []:サーバのホスト名
Email Address []:admin@email.com

# キーからパスフレーズを取り除く
% cp key.pem key.pem.org
% openssl rsa -in key.pem.org -out key.pem
# 証明書を作成
% openssl x509 -req -days 365 -in cert.csr -signkey key.pem -out cert.pem
```

後ほど、ここで作ったprivateキーと証明書をriakの設定ファイル内で指定します。

## 3. 設定ファイルの修正

ホスト名とかストレージとかあとで変更すると面倒なのでriakの起動前にconfを修正してしまいます。

```zsh:/etc/riak/riak.conf
# ストレージ選択オプション
# bitcaskを指定。
storage_backend = bitcask

# ノード名
# クラスターをくみたいのでLAN内で有効なFQDNを指定した
# IPでももちろん大丈夫
#nodename = riak@127.0.0.1
nodename = riak@localhost1

# ノード管理用webインターフェイスを有効にした
#riak_control = off
riak_control = on

# 管理用webのbasic認証も有効に
riak_control.auth.mode = userlist
riak_control.auth.user.user.password = pass

# 2.0から下記のオプションはなくなったよう
#riak_control.admin = true

# サーバ証明書とprivateキーを指定します。
ssl.certfile = /etc/riak/cert.pem
ssl.keyfile = /etc/riak/key.pem
# CA署名は行っていないのでcacertfileの部分はコメントアウトしておきます。
## ssl.cacertfile = /etc/riak/cacert.pem

# HTTPにバインドしたいTCPインターフェイスを指定します。
# ローカルホストでも外向きIPでもどちらも使えるように0.0.0.0をバインドしました。
#listener.http.internal = 127.0.0.1:8098
listener.http.internal = 0.0.0.0:8098

# ProtocolBuffersにバインドしたいTCPインターフェイスを指定します。
# こちらもローカルホスト、外向きIPのどちらも使えるように0.0.0.0をバインドしました。
#listener.protobuf.internal = 127.0.0.1:8087
listener.protobuf.internal = 0.0.0.0:8087

## listener.https.internal = 127.0.0.1:8098
listener.https.internal = 0.0.0.0:8069
```

## 4. riakの起動

riakを起動します。
すると、起動はするのですがwarningがでてしまいます(´･_･`)

```zsh:zsh
% /etc/init.d/riak start
!!!!
!!!! WARNING: ulimit -n is 1024; 4096 is the recommended minimum.
!!!!
```

Bashoのriakインストールガイドに下記のような記述があります。

> Open Files Limit
> As you may have noticed, if you haven't adjusted your open files limit (ulimit -n), Riak > will warn you at startup about the limit. You're advised to increase the operating system > default open files limit when running Riak. You can read more about why in the Open Files > Limit documentation.
> 
> [Post Installation - riakdocs](http://docs.basho.com/riak/2.0.0pre11/ops/building/installing/post-install/)

下記のブログを参考に、ulimitを設定しました。

* [Debian ulimitで設定した値を永続化する](http://symfoware.blog68.fc2.com/blog-entry-1151.html)

```zsh:zsh
% ulimit -n 4096
% /etc/security/limits.conf
~
* soft nofile 4096
* hard nofile 4096

# rootの指定を追加
root soft nofile 4096
root hard nofile 4096
~

# で、riakを再起動
% /etc/init.d/riak restart
```

warningは消えました！
起動確認します。

```zsh:zsh
# 動いたかどうかたしかめる
% riak ping
pong
% riak-admin
Attempting to restart script through sudo -H -u riak
Successfully completed 1 read/write cycle to 'riak@0.0.0.0'
```

無事起動しました(*^^)v

## 5. クラスターの構築

さてriakが起動したのでクラスターを構築します。
クラスターの構築もとてもかんたんです。
管理用webからもCUIからもノードの追加及び切り離しを行うことができます。

### 5-1. 管理用webインターフェイスからクラスターを構築

起動したriakのうちいずれかにブラウザからアクセスします。
`https://localhost1:8069/admin`
※HTTPSでないと開きません。

![riak_node.png](https://qiita-image-store.s3.amazonaws.com/0/31408/fb7459bb-0257-c03a-9d3b-800e9319323b.png)

メニューからリングっぽいやつを選択します。
「Add Node」というテキストボックスがあるので、
ここに/etc/riak/riak.confで指定したノード名を入れて「Add」します。

ノードをクラスターから外すには、メニューの壊れたリングっぽいのを選択します。

![riak_node2.png](https://qiita-image-store.s3.amazonaws.com/0/31408/e2f6e191-78e4-661f-c24d-b04d4b4508d2.png)

外したいノードを選択して「apply」すればOKです。

### 5-2. CUIからクラスターを構築

CUIからノードを追加するには、`riak-admin`を使います。

```zsh:zsh
% riak-admin cluster join riak@localhost2  # ノード名
% riak-admin cluster plan # 確認
% riak-admin cluster commit # コミット
```

`riak-admin cluster commit`を行わないとノードの追加はクラスターに反映されません。

CUIからノードを削除します。

```zsh:zsh
% riak-admin cluster leave
% riak-admin cluster commit # コミット
```

`riak-admin cluster plan`でクラスターの状況を確認することができます。
以上でriak2.0.0preでのクラスター構築完了です♪