Riak インストール手順（インストールと動作確認）

## riak 2.0のインストール

あまり世間で騒がれていないのですが、このriak かなり使いやすいです

- インストール簡単
- クラスタリング簡単
- 障害対応簡単

の三拍子揃っています

ここでは、ひとまずインストールの手順だけ記載していこうと思います

## Riak って何？

Riakは、amazonのDynamoをベースにした、分散KVSです。 データは永続的に保存されます。redis等も、データは永続的ではありますが、メモリに依存する為、設定メモリを超えたもののデータを保証するものではないのに対して、Riakは、ディスクに依存しているので、ディスクがゆるす限り。データを格納することができます。また、画像や動画も格納することができます


## インストール手順

Centos 6.X でインストールする作業証跡になります

### 前準備

- limits.conf のバックアップ

詳細は割愛しますが、limits.confはリソースを制限できる設定ファイルになります。

```bash

cp /etc/security/limits.conf /etc/security/limits.conf.bak
```

- limits.conf の編集

limits.conf の末尾に以下を追記します（設定は再起動後反映されます）

```bash

cat << '_EOT_' >> /etc/security/limits.conf
# ulimit settings for Riak
root soft nofile 65536
root hard nofile 65536
riak soft nofile 65536
riak hard nofile 65536
_EOT_
```

- limitの変更

```bash
ulimit -n 65536
```

### インストール

- centos 6.X

```
cd /tmp
wget http://s3.amazonaws.com/downloads.basho.com/riak/2.1/2.1.1/rhel/6/riak-2.1.1-1.el6.x86_64.rpm
rpm -ivh riak-2.1.1-1.el6.x86_64.rpm
```

- centos5.X

```
cd /tmp
wget http://s3.amazonaws.com/downloads.basho.com/riak/2.1/2.1.1/rhel/5/riak-2.1.1-1.el5.x86_64.rpm
rpm -ivh riak-2.1.1-1.el5.x86_64.rpm
```


- 環境設定ファイルのバックアップ

```
cp -a /etc/riak/riak.conf /etc/riak/riak.conf.bak
```

- 環境ファイルの編集

```
storage_backend = leveldb
nodename = riak@192.168.0.111 ## サーバのIP
listener.http.internal = 0.0.0.0:8098
listener.protobuf.internal = 0.0.0.0:8087
riak_control.auth.user.admin.password = naruhaya

```

## Riak の開始

- Riak の開始

```
riak start
```

## 動作検証

- member-statusの確認

```
 riak-admin member-status
================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%      --      'riak@192.168.0.111'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
```

- ring-statusの確認

```
riak-admin ring-status
================================= Membership ==================================
Status     Ring    Pending    Node
-------------------------------------------------------------------------------
valid     100.0%      --      'riak@192.168.0.111'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0
[root@dbcrtmst01 riak]# riak-admin ring-status
================================== Claimant ===================================
Claimant:  'riak@192.168.0.111'
Status:     up
Ring Ready: true

============================== Ownership Handoff ==============================
No pending changes.

============================== Unreachable Nodes ==============================
All nodes are up and reachable
```

- 動作検証

```
riak ping
---
pong
```

- データを投入してみる

```
curl -X PUT -i 'http://192.168.0.111:8098/types/default/buckets/accounts/keys/00100' -H 'Content-Type: application/json' -d '{name: "panda", age: 21}'
curl -X PUT -i 'http://192.168.0.111:8098/types/default/buckets/accounts/keys/00101' -H 'Content-Type: application/json' -d '{name: "kopanda", age: 19}'
```

- キー一覧を取得する

上記にて登録されたキーを確認します

```
curl -i 'http://192.168.0.111:8098/buckets/accounts/keys?keys=true'
----
HTTP/1.1 200 OK
Vary: Accept-Encoding
Server: MochiWeb/1.1 WebMachine/1.10.8 (that head fake, tho)
Date: Tue, 06 Oct 2015 07:34:19 GMT
Content-Type: application/json
Content-Length: 26

{"keys":["00101","00100"]}
```

- 対象キーの詳細情報を取得する

```
curl -i 'http://192.168.0.111:8098/buckets/accounts/keys/00101' 
---
HTTP/1.1 200 OK
X-Riak-Vclock: a85hYGBgzGDKBVI8BTf2l5y8Pq8MIpTImMfKkPel/TxfFgA=
Vary: Accept-Encoding
Server: MochiWeb/1.1 WebMachine/1.10.8 (that head fake, tho)
Link: </buckets/accounts>; rel="up"
Last-Modified: Tue, 06 Oct 2015 07:29:50 GMT
ETag: "5O58TmWzQJT3rTpXsZrOJ6"
Date: Tue, 06 Oct 2015 07:37:41 GMT
Content-Type: application/json
Content-Length: 26

{name: "kopanda", age: 19}
```

いかがだったでしょうか？結構簡単にセットアップできたのではないかと思います。今回はインストールと基本動作のみ説明した形になっておりますが、本来NoSQLを使うところの利点、いや、Riakを使う上でのメリットの一つである、クラスタリングには一切触れておりません

次回はクラスタの追加・切り離しの部分を話しを中心に説明しようかな？と思います！！