IDCF Tech-Blog

IDCF テックブログ

クラウド・データセンター・ビッグデータを提供するIDCフロンティアの公式テックブログ

RiakとRiak CSを使って分散ストレージを構築

※この記事は公開されてから1年半以上経過しています。情報が古い可能性がありますのでご注意ください。

今回のエンジニアブログでは、IDCフロンティアが研究開発を進めている分散ストレージについて、Basho Technologies社のRiakとRiak CSを使って構築する方法を説明していきます。

Riakとは

RiakはAmazon Dynamoを参考にして開発された分散キーバリューストアです。他の分散キーバリューストアに比べ、運用性が高く、ノードを追加してスケールアウトする操作も容易で、3コマンドで可能です。また、Entreprise版ではマルチデータセンターレプリケーションをサポートしており、高可用性を実現します。

Riak CSとは

Riak CSはRiak上に構築され、Awazon Web Services(以下、AWS) S3互換のREST APIを提供します。またマルチテナント機能を有し、アクセス制限、ネットワーク使用レポート、ストレージ使用レポートを提供します。Riak CSにはStanchionと呼ばれるアプリケーションが必要になります。StanchionもBasho Technologies社から提供されており、ユーザー名やバケット名の一意性を確認する役割を担います。

インストール準備

Riakではデフォルトで3ノード(ノードはサーバーと同意です)にデータをコピーします。そのため、デフォルト設定の場合は3つ以上のノードが必要になります。今回はIDCフロンティア セルフクラウド上に以下のスペックの仮想マシンを3台準備し、分散ストレージを構築していきます。IDCフロンティア セルフクラウドの使い方はご利用ガイドを参照してください。

IDCフロンティア セルフクラウドではブラウザから仮想マシンの作成、削除がお客様自身で可能であるため、Riakのノード追加、削除が容易に試せます。とりあえずRiak、RiakCSを動かしてみたい、Riak、RiakCSの運用性を確認してみたい方は、是非IDCフロンティア セルフクラウド上で構築してみてください。

Template:[LATEST]CentOS 6.4 64bit

OS:CentOS6.4 64bit

CPU:2

Memory:2G

Disk:15G

 

それでは実際に構築していきましょう。

1. OS設定

OSのインストール完了後、何点かOSの設定を変更する必要があります。

・selinuxの無効化

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

CentOSのデフォルト設定の場合、selinuxが有効になっているためこれを無効にします。

※IDCフロンティア セルフクラウドで用意されているTemplateから作成した仮想マシンの場合、selinuxはデフォルトで無効になっています。

 [root@riakdemo1 ~]# cd /etc/selinux
 [root@riakdemo1 ~]# vi config
 SELINUX=の箇所をdisabledにします。
 SELINUX=disabled

・Open Files Limitの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

Open Files Limitを設定します。こちらを設定しておかないと、riak、riak csの起動時に警告が表示されます。

 [root@riakdemo1 ~]# cd /etc/security/
 [root@riakdemo1 ~]# vi limits.conf
 ファイルの末尾に以下を追加します。
 riak               soft     nofile          65536
 riak               hard     nofile          65536
 root               soft     nofile          65536
 root               hard     nofile          65536

上記設定を反映させるため、ノードの再起動を実施します。

2. Riak、Riak CS、Stanchionのパッケージをダウンロード

Riak、Riak CSには無償のオープンソース版と有償のエンタープライズ版があります。有償のエンタープライズ版にはデータセンター間のレプリケーション機能やsnmpでの監視機能等がついています。今回は無償のオープンソース版をインストールします。最新のオープンソース版Riak、Riak CS、Stanchionは以下からダウンロード可能です。

[Riak] http://docs.basho.com/riak/latest/downloads/

[Riak CS、Stanchion] http://docs.basho.com/riakcs/latest/riakcs-downloads/

それでは構築した仮想マシンにダウンロードを実施します。Stanchionだけは1つの仮想マシンにのみダウンロードします。Riak、Riak CSはすべての仮想マシンにダウンロードします。今回の構成では、riakdemo1にStanchionをインストールします。

 [root@riakdemo1 ~]# wget http://s3.amazonaws.com/downloads.basho.com/riak/1.4/1.4.1/rhel/6/riak-1.4.1-1.el6.x86_64.rpm
 [root@riakdemo1 ~]# wget http://s3.amazonaws.com/downloads.basho.com/stanchion/1.4/1.4.0/rhel/6/stanchion-1.4.0-1.el6.x86_64.rpm
 [root@riakdemo1 ~]# wget http://s3.amazonaws.com/downloads.basho.com/riak-cs/1.4/1.4.0/rhel/6/riak-cs-1.4.0-1.el6.x86_64.rpm

Stanchion以外のダウンロードをriakdemo2、riakdemo3でも同様に行います。

3. Riakのインストール

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# rpm -ivh riak-1.4.1-1.el6.x86_64.rpm
 準備中...                ########################################### [100%]
    1:riak                   ########################################### [100%]
 [root@riakdemo1 ~]#

4. Riak CSのインストール

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# rpm -ivh riak-cs-1.4.0-1.el6.x86_64.rpm
 準備中...                ########################################### [100%]
    1:riak-cs                ########################################### [100%]
 [root@riakdemo1 ~]#

5. Stanchionのインストール

実施対象ノード:riakdemo1

 [root@riakdemo1 ~]# rpm -ivh stanchion-1.4.0-1.el6.x86_64.rpm
 準備中...                ########################################### [100%]
    1:stanchion              ########################################### [100%]
 [root@riakdemo1 ~]#

6. Riakの設定変更

・/etc/riak/app.configの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [変更前]
 {pb, [ {"127.0.0.1", 8087 } ]}
 [変更後]
 各ノードのIPに変更します。
 {pb, [ {"10.2.2.211", 8087 } ]}
 [変更前]
 {http, [ {"127.0.0.1", 8098 } ]},
 [変更後]
 各ノードのIPに変更します。
 {http, [ {"10.2.2.211", 8098 } ]},
 [変更前]
 {storage_backend, riak_kv_bitcask_backend},
 [変更後]
 バックエンドストレージをriak cs用に変更します。
 {add_paths, ["/usr/lib64/riak-cs/lib/riak_cs-1.4.0/ebin"]},
 {storage_backend, riak_cs_kv_multi_backend},
 {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]},
 {multi_backend_default, be_default},
 {multi_backend, [
   {be_default, riak_kv_eleveldb_backend, [
     {max_open_files, 50},
       {data_root, "/var/lib/riak/leveldb"}
   ]},
     {be_blocks, riak_kv_bitcask_backend, [
       {data_root, "/var/lib/riak/bitcask"}
   ]}
 ]},
 [追加]
 riak_coreセクションに以下を追加します。
 {default_bucket_props, [{allow_mult, true}]},

・/etc/riak/vm.argsの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [変更前]
 -name riak@127.0.0.1
 [変更後]
 各ノードのIPに変更します。
 -name riak@10.2.2.211

7. Riak CSの設定変更

・/etc/riak-cs/app.configの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [変更前]
 {cs_ip, "127.0.0.1"},
 [変更後]
 各ノードのIPに変更します。
 {cs_ip, "10.2.2.211"},
 [変更前]
 {riak_ip, "127.0.0.1"},
 [変更後]
 各ノードのIPに変更します。
 {riak_ip, "10.2.2.211"},
 [変更前]
 {stanchion_ip, "127.0.0.1"},
 [変更後]
 各ノードのIPに変更します。
 {stanchion_ip, "10.2.2.211"},
 [変更前]
 {cs_root_host, "s3.amazonaws.com"},
 [変更後]
 分散ストレージのエンドポイントとなるFQDNに変更します。
 {cs_root_host, "riakdemo.xxx.xxx.jp"},

・/etc/riak-cs/vm.argsの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [変更前]
 -name riak-cs@127.0.0.1
 [変更後]
 各ノードのIPに変更します。
 -name riak-cs@10.2.2.211

8. Stanchionの設定変更

・/etc/stanchion/app.configの変更

実施対象ノード:riakdemo1

 [変更前]
 {stanchion_ip, "127.0.0.1"},
 [変更後]
 riakdemo1のIPに変更します。
 {stanchion_ip, "10.2.2.211"},
 [変更前]
 {riak_ip, "127.0.0.1"},
 [変更後]
 riakdemo1に変更します。
 {riak_ip, "10.2.2.211"},

・/etc/stanchion/vm.argsの変更

実施対象ノード:riakdemo1

 [変更前]
 -name stanchion@127.0.0.1
 [変更後]
 riakdemo1のIPに変更します。
 -name stanchion@10.2.2.211

9. Riak、Riak CS、Stanchionの起動

起動の順序は、Riak→Stanchion→Riak CSの順番になります。

・Riakの起動

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# riak start

・Riakの起動確認

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# riak ping
 pong
 pongが返ってくればriakは起動しています。

・Stanchionの起動

実施対象ノード:riakdemo1

 [root@riakdemo1 ~]# stanchion start

・Stanchionの起動確認

実施対象ノード:riakdemo1

 [root@riakdemo1 ~]# stanchion ping
 pong
 pongが返ってくればstanchionは起動しています。

・Riak CSの起動

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# riak-cs start

・Riak CSの起動確認

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 ~]# riak-cs ping
 pong
 pongが返ってくればriak csは起動しています。

10. リングの作成

作成した3台でリングを作成します。リングとはクラスタ(複数ノード)内でデータを分散し保存するためのハッシュ空間のことです。リング作成前の状態では、以下の通りリングに参加しているのは1ノード(自分自身)のみとなります。

 [root@riakdemo1 ~]# riak-admin member_status
 ================================= Membership ==================================
 Status     Ring    Pending    Node
 -------------------------------------------------------------------------------
 valid     100.0%      --      'riak@10.2.2.211'
 -------------------------------------------------------------------------------
 Valid:1 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

riakdemo2をriakdemo1のリングに追加します。

実施対象ノード:riakdemo2

 [root@riakdemo2 ~]# riak-admin cluster join riak@10.2.2.211(riakdemo1のIPアドレス)
 Success: staged join request for 'riak@10.2.2.33' to 'riak@10.2.2.211'

riakdemo2がriakdemo1のリングに追加される計画を確認します。

実施対象ノード:riakdemo2

 [root@riakdemo2 ~]# riak-admin cluster plan
 =============================== Staged Changes ================================
 Action         Details(s)
 -------------------------------------------------------------------------------
 join           'riak@10.2.2.33'
 -------------------------------------------------------------------------------


 NOTE: Applying these changes will result in 1 cluster transition

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

 ================================= Membership ==================================
 Status     Ring    Pending    Node
 -------------------------------------------------------------------------------
 valid     100.0%     50.0%    'riak@10.2.2.211'
 valid       0.0%     50.0%    'riak@10.2.2.33'
 -------------------------------------------------------------------------------
 Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

 WARNING: Not all replicas will be on distinct nodes

 Transfers resulting from cluster changes: 32
   32 transfers from 'riak@10.2.2.211' to 'riak@10.2.2.33'

riakdemo2がriakdemo1のリングに追加される計画をコミットします。

実施対象ノード:riakdemo2

 [root@riakdemo2 ~]# riak-admin cluster commit
 Cluster changes committed

この時点でriakdemo2がriakdemo1のリングに追加され、riakdemo1からriakdemo2にデータが配置されます。

 [root@riakdemo2 ~]# riak-admin member_status
 ================================= Membership ==================================
 Status     Ring    Pending    Node
 -------------------------------------------------------------------------------
 valid      75.0%     50.0%    'riak@10.2.2.211'
 valid      25.0%     50.0%    'riak@10.2.2.33'
 -------------------------------------------------------------------------------
 Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

以下の通りPendingの箇所が「--」となった時点でデータ配置が完了し、リングへの追加が完了です。

 [root@riakdemo2 ~]# riak-admin member_status
 ================================= Membership ==================================
 Status     Ring    Pending    Node
 -------------------------------------------------------------------------------
 valid      50.0%      --      'riak@10.2.2.211'
 valid      50.0%      --      'riak@10.2.2.33'
 -------------------------------------------------------------------------------
 Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

同様にriakadmin3をリングへ追加します。最終的には以下の状態になります。

 [root@riakdemo3 riak-cs]# riak-admin member_status
 ================================= Membership ==================================
 Status     Ring    Pending    Node
 -------------------------------------------------------------------------------
    valid      34.4%      --      'riak@10.2.2.211'
    valid      32.8%      --      'riak@10.2.2.33'
    valid      32.8%      --      'riak@10.2.2.58'
 -------------------------------------------------------------------------------
 Valid:3 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

11. 管理者用のアクセスキーを作成

Riak、Riak CS、Stanchionの設定に管理者用のアクセスキーを登録する必要があります。riakdemo1で管理者用のアクセスキーを生成します。

1. Riak CSの設定変更

・/etc/riak/app.config

実施対象ノード:riakdemo1

 [変更前]
 {anonymous_user_creation, false},
 [変更後]
 {anonymous_user_creation, true},

・Riak CSの再起動

実施対象ノード:riakdemo1

 [root@riakdemo1 riak-cs]# riak-cs restart
 ok
 [root@riakdemo1 riak-cs]#

2. 管理者用のアクセスキーの作成

実施対象ノード:riakdemo1

以下のコマンドで管理者用のアクセスキーを作成します。URLのIP部分は実行するノードのIPを指定します。

 [root@riakdemo1 ~]# curl -H 'Content-Type: application/json' -X POST http://10.2.2.211:8080/riak-cs/user --data '{"email":"admin@riakdemo.local", "name":"admin"}'
 {"email":"admin@riakdemo.local","display_name":"admin","name":"admin","key_id":"0MB9SCUBK_KJCNUWX0KF","key_secret":"0spg70YtgKTNZfuVQ4GBcY_KBq43TvhpfEHFxA==","id":"7fcb112f8125fe9dbcb0d335d7760b041d76bf73610a4e450feea1f227fdb2cc","status”:"enabled"}
 [root@riakdemo1 riak-cs]#

作成されたkey_idとkey_secretをメモしておきます。

管理者用のアクセスキー発行後、先ほど変更した設定を元に戻します。設定を戻しておかないと、誰でもkey_idとkey_secretが発行できてしまうので、注意が必要です。

・/etc/riak/app.configの変更

実施対象ノード:riakdemo1

 [変更前]
 {anonymous_user_creation, true},
 [変更後]
 {anonymous_user_creation, false},

・Riak CSの再起動

実施対象ノード:riakdemo1

 [root@riakdemo1 riak-cs]# riak-cs restart
 ok
 [root@riakdemo1 riak-cs]#

3. 管理者用のアクセスキーを設定ファイルに投入します。

・/etc/riak-cs/app.configの変更

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [変更前]
 {admin_key, "admin-key"},
 [変更後]
 {admin_key, "0MB9SCUBK_KJCNUWX0KF"},
 [変更前]
 {admin_secret, "admin-secret"},
 [変更後]
 {admin_secret, "0spg70YtgKTNZfuVQ4GBcY_KBq43TvhpfEHFxA=="},

・/etc/stanchion/app.configの変更

実施対象ノード:riakdemo1

 [変更前]
 {admin_key, "admin-key"},
 [変更後]
 {admin_key, "0MB9SCUBK_KJCNUWX0KF"},
 [変更前]
 {admin_secret, "admin-secret"},
 [変更後]
 {admin_secret, "0spg70YtgKTNZfuVQ4GBcY_KBq43TvhpfEHFxA=="},

設定反映のため、Riak CS、Stanchionを再起動します。

・Riak CSの再起動

実施対象ノード:riakdemo1、riakdemo2、riakdemo3

 [root@riakdemo1 riak-cs]# riak-cs restart
 ok
 [root@riakdemo1 ~]#

・Stanchionの再起動

実施対象ノード:riakdemo1

 [root@riakdemo1 riak-cs]# stanchion restart
 ok
 [root@riakdemo1 ~]#

これで分散ストレージの構築は完了です。

12. ネットワーク設定

最後に、構築した分散ストレージをインターネット経由でつかえるようにネットワークの設定を行います。
IDCフロンティア セルフクラウドには標準でグローバルIPアドレスが1つ付与されています。そして、そのグローバルIPアドレスでのファイアウォール、ポートフォワード、ロードバランサ―設定が可能となっています。今回は以下のように設定しました。

・ロードバランサ―設定項目で、構築した3台のサーバーに対してポート8080でロードバランシング
・ファイアウォール設定項目で、分散ストレージを利用させたいサイトからのポート8080を許可

IDCフロンティア セルフクラウドでのネットワーク設定変更方法についてはご利用ガイド(ネットワーク)を参照してください。

また、インターネット経由で接続するためのFQDN(今回の構成ではriakdemo.xxx.xxx.jp)をDNSサーバーに登録する必要があります。その際、どのサブドメインでも同じIPアドレスに変換されるようにワイルドカードを使います。

今回の設定では、

riakdemo.xxx.xxx.jp
*.riakdemo.xxx.xxx.jp

で同じIPアドレスに変換されるようにDNSサーバーへ登録します。

それでは実際に構築した分散ストレージにオブジェクトをアップロードしてみましょう。

Riak CSはAWS S3 API互換のため、s3cmd、s3curl等のAWS S3 API対応のアプリケーションをつかってオブジェクトを管理できます。今回はWindows上で動作するDragonDiskを使ってオブジェクトをアップロードしてみます。

DragonDiskは以下からダウンロード可能です。ダウンロード完了後にexeファイルを実行し、インストールを完了させます。

http://www.dragondisk.com/download-amazon-s3-client-google-cloud-storage-client.html

インストールされたDragonDiskを起動します。

image2

「File」-「Accounts...」から新規ユーザー作成を行います。

image3

必要箇所を入力し、ユーザー作成を完了させます。

image4

作成されたユーザーを選択し、新規バケット作成を実施します。バケットはWindowsのフォルダのような位置づけになります。バケット名は分散ストレージ内で一意である必要があります。

image5

作成されたバケットに対してオブジェクトをドラッグ&ドロップすることで、以下の通りオブジェクトが分散ストレージへアップロードされます。

image6

今回はDragonDiskからの分散ストレージを利用する手順を簡単に紹介しましたが、次回はs3cmd、s3fs、s3curl等のコマンドツールを使った分散ストレージの利用方法を紹介します。ご期待ください!

以上、IDCフロンティア 営業支援部 テクニカルセールスグループの佐藤でした。

Copyright © IDC Frontier Inc.