都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

分散型 NOSQL データベースである Riak ( なんて読むんでしょうか? りあっく? らいあっく? りあーく? ) を試してみる

 2014年プライベートでやりたいこと でNoSQL 系に詳しくなると書いたので、NOSQL の Riak を試してみたいと思います。Riak は Basho Technologies が開発している NoSQL データベースです。会社名の Basho は松尾芭蕉が名前の由来らしいです。オープンソース版と商用版の二つを展開しています。Amazon Dynamo の論文に基づいて設計・開発が行われました。スケーラビリティ・運用の容易性等が特徴として挙げられます。

 開発言語は、エリクソン社がシステム開発に使用している【Erlang】です。Erlang 自体が分散環境などに最適化されたものであるため、Riak 自体もその特徴を引き継いでいます。

 分散環境において、プライマリというかマスタノードという考えがなく、すべてのノードが対等な立場であり、単一点障害というものが存在しません。( 素晴らしいですねぇ。) なので、ノードを追加するのも非常に容易です。( ノード追加時には、自動的に再配置を行うそうです。 ) 各データはハッシュ値による、各ノードへの分散配置が行われます。レプリケーションも他のノードへ自動に行われます。通常の DBMS 製品であれば、単一点障害は避けられません。( 例えば、監視サーバ.... ) 設計思想が素晴らしいですね。

 Riak のお勉強のため、Windows Azure 上にインストールしてみたいと思います。Riak 自体分散配置が特徴なので、3ノード展開してみます。

 まずは、Windows Azure 上に CentOS の仮想イメージ3つ作成してみましょう。一つ目を作成します。仮想マシン名を『riaknode1』とします。赤枠のボタンをクリックしてください。

f:id:koogucc11:20140113214054p:plain

 下図のように設定し、赤枠のボタンをクリックします。

f:id:koogucc11:20140113214359p:plain

 赤枠のボタンをクリックします。これで一つ目の仮想マシンを作成することができました。

f:id:koogucc11:20140113214615p:plain

 二つ目および三つ目の仮想マシンは、仮想マシン名をそれぞれ riaknode2、riaknode3とします。ID および パスワードは同一にしておきましょう。クラウドサービスは一つ目の仮想マシン作成時のものと同一のものを使用します。riaknode1 のエンドポイントの設定を行います。エンドポイントをクリックし、追加をクリックします。

f:id:koogucc11:20140113215704p:plain

 赤枠のボタンをクリックします。

f:id:koogucc11:20140113103419p:plain

 エンドポイントの詳細を下記のように設定し、赤枠のボタンをクリックします。

f:id:koogucc11:20140113220119p:plain

 SSH クライアントの Putty で下図の通り設定し、Open をクリックします。

f:id:koogucc11:20140113110934p:plain

 各仮想マシン (riaknode1, riaknode2, riaknode3) にログインします。

f:id:koogucc11:20140113104216p:plain

 プロンプト上で下記のコマンドを入力します。( 各仮想マシン上で同様の作業を実施します。 )

$ sudo su -
# curl -s https://raw.github.com/basho/riak_on_azure/1.0/azure_install_riak.sh | sh

f:id:koogucc11:20140113220740p:plain

 riaknode1 の仮想マシンダッシュボードから、仮想マシンの内部 IP をチェックします。( 赤枠の部分です。 ) 

f:id:koogucc11:20140113221128p:plain

 riaknode2、riaknode3 上でriaknode1 の内部 IP を使用して、下記のコマンドを実行します。

# riak-admin cluster join riak@xxx.xxx.xxx.xxx

 コマンドが成功すると、下図のようになります。

f:id:koogucc11:20140113221528p:plain

 分散ノードを構成します。riaknode1 から下記のコマンドを発行します。

# riak-admin cluster plan
# riak-admin cluster commit
# riak-admin member_status

 コマンドが成功すると、下図のようになります。

f:id:koogucc11:20140113222139p:plain

 テストデータをロードします。下記のコマンドを発行します。

# curl -sL http://rekon.basho.com | sh

 コマンドが成功すると、下図のようになります。

f:id:koogucc11:20140113222449p:plain

 下記の URL をブラウザで参照すると、サンプルデータの参照ができます。

http://domain_name.cloudapp.net:8098/riak/rekon/go

f:id:koogucc11:20140113222926p:plain

 たったこれだけの手順で NOSQL 分散型データベースの環境ができるのかっ!というほど手順が簡単ですね。今後は、REST API など試してみたいと思います。Riak の今後の動向が気になります。

 今まで、RDBMS しか扱ったことない私のような技術者からすると、このようなシステムは結構衝撃的です.....今後は、Riak の REST API について調査していきます。( おそらく、すごいスマートな感じなんだろうな.... )

※ riak をインストールしたのはいいのですが、下記のような問題があります。

http://lists.basho.com/pipermail/riak-users_lists.basho.com/2012-December/010600.html

うーん。なんででしょ?うーん、反応ないみたいですね。

f:id:koogucc11:20140115010831p:plain

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)

NOSQLの基礎知識 (ビッグデータを活かすデータベース技術)