技術解説

データ・ダイバーシティと KVSの利用 Riak KV の活用例(前編)

データの多様化

近年ビッグデータを活用した事例が増える中、データ活用がビジネススピードを加速する上で重要なキーワードとなっています。2000年代後半、ビッグデータが潮流になると言われていた時代に Google や Amazonのサービス基盤で使われていたクラウドコンピューティング技術の論文が公開され、欧米の先進的な企業が次々とその技術を応用しオープンソース(OSS)として公開しました。また、スマートフォンなどモバイル端末の普及や通信回線のブロードバンド化が進むと共に、常識を覆すような画期的なサービスが次々と生まれ、デジタライゼーション(ここでは多様なデジタルデータの活用と定義します)がビジネスの生命線になっていると言われています。

 

 データドライバー

 

 

NoSQLが注目された背景

もともと、企業データはデータベースで管理されSANやファイルストレージに保管する構成が一般的でしたが、様々なデータソースを集中的に管理することがコストや技術面で難しいケースが出てきました。

 

増え続けるアプリケーションとデータ

 

 

一方、現在データ分析によく使われているHadoopはある程度蓄積されたデータに対してバッチで処理を行うため、比較的サイズが大きいデータの扱いは得意ですが、数バイト~数キロバイトの小さいデータに対しては最適化されていません。また、逐次増加するデータに対してはHBaseを一時テーブルで利用するケースが考えられますが、HBase を単にキーバリューストア(以下KVS)として使う場合は、Hadoop(HDFS)の運用経験がないユーザーにとっては少し敷居が高いかもしれません。

このように、ビジネスデータの変化や急増するユーザーに対応するための技術的な側面からNoSQLの活用が注目されました。

 

NoSqlの活用

 

Riak KVの概要

Riak KV は Amazon Dynamoから派生したKVS です。

Amazon Dynamo 論文

 

 

Riak KVは主に以下の特徴があります。

  • 可用性が高い
  • 単一障害点がないマスターレス
  • 構築が容易
  • データ構造がシンプル
  • 運用コストを削減できる
  • 公式のライブラリーが OSS で提供されている

 

Riak KVは商用版とOSS版があります。商用版には製品サポートが付きます。
機能面の差に関しては、弊社の下記のページをご参照ください。
オープンソースと商用の違い
http://cn.teldevice.co.jp/product/detail/riak/spec

 

 

Riak KVを使ってみる

ここでは、Riak KVのセットアップ方法について説明します。
ソフトウェアは下記の公式ページからOSS版がダウンロードでき、今回はCentOS6用の
ディストリビューションを使います。
http://docs.basho.com/riak/kv/latest/downloads/

 

インストールの前に

 

1).設定ファイル(riak.conf)のバックアップをを取り、下記のように編集します。

ulimit -n 65536

cp –p /etc/security/limits.conf /etc/security/limits.conf.bak

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_

 

2).iptablesを無効にします。

service iptables stop

chkconfig iptables off

 

3). このあとで、全文検索機能を使うため下記のページからJREをインストールします。

http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jre-7u25-oth-JPR

 

Riak KVのインストール

Red Hat Enterprise Linux 6用のパッケージをダウンロードしてインストールします。ここでは、5台のサーバーでクラスターを構成しますが最初のサーバー(Node1)にRiak KVをインストールします。

cd /tmp

wget http://s3.amazonaws.com/downloads.basho.com/riak/2.1/2.1.4/rhel/6/riak-2.1.4-1.el6.x86_64.rpm

rpm -ivh riak-2.1.4-1.el6.x86_64.rpm

 

※Riak KVクラスターはマスターレスなので、前段にロードバランサーを置くかクライアント側で負荷分散することが一般的です。

 

Riak KVの設定変更

設定ファイル(riak.conf)のバックアップを取り、下記の箇所を変更します。

cp -p /etc/riak/riak.conf /etc/riak/riak.conf.bak

 

/etc/riak/riak.conf の編集

nodename = riak@10.20.0.51 ## サーバーのIP

listener.http.internal = 0.0.0.0:8098

listener.protobuf.internal = 0.0.0.0:8087

 

Riak KVの起動

Riak KV サービスを起動します。

riak start

riak ping

# pong が返ることを確認します。

 

他の4台でも同様にセットアップします。各サーバーのriak.confでnodenameにサーバーのIPを変更します。

 

クラスターの構築

Node2 - Node5の4台で下記のコマンドを実行します。

※ここでは、コマンドの説明は割愛します。

riak-admin cluster join riak@10.20.0.51 # Node1 に対して JOIN

Node1で下記のコマンドを実行します。

riak-admin cluster plan

riak-admin cluster commit

 

commit実行後、Node1でriak-admin member-statusとriak-admin transfersが下記の状態になるまで待ちます。

riak-admin member-status

=================================Membership==================================

Status     Ring    Pending    Node

-------------------------------------------------------------------------------

	valid      20.3%      --      'riak@10.20.0.51'

	valid      20.3%      --      'riak@10.20.0.52'

	valid      20.3%      --      'riak@10.20.0.53'

	valid      20.3%      --      'riak@10.20.0.54'

	valid      18.8%      --      'riak@10.20.0.55'

-------------------------------------------------------------------------------

	Valid:5 / Leaving:0 / Exiting:0 / Joining:0 / Down:0 


riak-admin transfers

	No transfers active

	Active Transfers:

 

データの書き込み・読み出し

HTTP で下記の Key/Value を投入します。

バケット: accounts

Key : alice

Value : {name: "alice", age: 20}

curl -X PUT http://10.20.0.51:8098/types/default/buckets/accounts/keys/alice -H
'Content-Type: application/json' -d '{name: "alice", age: 20}'

 

読み出しは下記のように Key を指定します。書き込んだデータが返ることを確認します。

curl http://10.20.0.51:8098/types/default/buckets/accounts/keys/alice
{name: "alice", age: 20}

 

前記は Raw データをJSON で書き込みましたが、下記のようなファイルで書くこともできます。

cat value.json

{name: "alice", age: 20}

{hobby: "tennis"}

{birthday: "Feb-20-1999"}

 

一旦データを消して、ファイルで書き直します。

curl -X DELETE http://10.20.0.51:8098/types/default/buckets/accounts/keys/alice

curl -X PUT http://10.20.0.51:8098/types/default/buckets/accounts/keys/alice\
-H 'Content-Type: application/json' -T value.json curl http://10.20.0.51:8098/types/default/buckets/accounts/keys/alice {name: "alice", age: 20} {hobby: "tennis"} {birthday: "Feb-20-1999"}

 

前記はNode1(10.20.0.51)にリクエストを送りましたが、他のノードからも同様にデータを読み出すことができます。

 

Node2(10.20.0.52)にリクエストを送信。

curl http://10.20.0.52:8098/types/default/buckets/accounts/keys/alice

{name: "alice", age: 20}

{hobby: "tennis"}

{birthday: "Feb-20-1999"}

 

Node3(10.20.0.53)にリクエストを送信。

curl http://10.20.0.53:8098/types/default/buckets/accounts/keys/alice

{name: "alice", age: 20}

{hobby: "tennis"}

{birthday: "Feb-20-1999"}

 

Riak KV は Data Types と呼ばれる、保存するデータの型を定義する事でよりアプリケーションよりの機能を提供する仕組みが実装されています。
後編では、Data Typesの機能と使い方を紹介します。

掲載製品の特長・仕様はこちらから