前回はkumofsを用いて分散環境を構築し、
kumofsのスケーラビリティ
前回、
kumofsは3種類のデーモンで構成されます。
kumo-server | 実際にデータを保存するノード。少なくとも1台必要です。後から追加できます。 |
kumo-manager | kumo-server群を管理するノード。1台または2台で動かします。 |
kumo-gateway | アプリケーションからのリクエストをkumo-serverに中継するプロキシ。アプリケーションを動かすホスト上で、 |
ここでもドキュメントのチュートリアルに従って、
サーバ | kumo-manager | kumo-server | kumo-gateway |
---|---|---|---|
serv1 | ○ | ○ | - |
serv2 | ○ | ○ | - |
serv3 | - | ○ | ○ |
この構成に新規にserv4を追加してみたいと思います。また、
serv4に前回と同様に環境をセットアップします。こういうときに仮想マシンは便利ですね。コピペ感覚で新規マシンを立ち上げられるんですから。ここでも前回と同様にこちらを参考に手順を進めてみます。
今回新たにserv4を作成しました。これを用いて下記のような構成をとってみます。
サーバ | kumo-manager | kumo-server | kumo-gateway |
---|---|---|---|
serv1 | ○ | ○ | - |
serv2 | ○ | ○ | - |
serv3 | - | ○ | ○ |
serv4 | - | ○ | - |
その前に、
分散環境のどのサーバにデータが格納されているかを確認してみたいと思います。現在の構成は3台がkumo-serverです。さらにレプリケーション数も3となっていますので、
確認のコマンドはkumohashを使用します。
[waki@serv1 $ kumohash -m serv1 assign name ca2d0d2a5599e96a name 0: 192.168.47.101:19800 1: 192.168.47.102:19800 2: 192.168.47.103:19800
nameというキーのデータはserv1, serv2, serv3に分散されていることがわかります。レプリケーション数とあっていますね。問題なさそうです。
それではサーバの追加です。serv4でkumo-serverを起動し、
# kumo-server -v -l serv4 -m serv1 -p serv2 -s /var/kumodb.tch
serv1でステータスを確認します。
$ kumoctl serv1 attach
新たにサーバが追加されました。非常に簡単ですね。
[waki@serv1$ kumoctl serv1 status hash space timestamp: Fri Aug 13 19:57:04 -0400 2010 clock 43217 attached node: 192.168.47.101:19800 (active) 192.168.47.102:19800 (active) 192.168.47.103:19800 (active) 192.168.47.200:19800 (active) not attached node:
ageというキーでデータを登録してみて、
[waki@serv1 $ kumohash -m serv1 assign age 728661ab9a6bc55d age 0: 192.168.47.200:19800 1: 192.168.47.102:19800 2: 192.168.47.101:19800
新たに追加したサーバにデータが分散して登録されているようです。レプリケーション数3もそのまま有効ですね。
また既存のキーであるnameも調べてみるとデータを保持するサーバの構成が変わっていました。新規サーバ追加など構成変更が発生した場合は、
kumofsのアベイラビリティ
それでは今度は障害が発生した想定で、
まずは現状の確認です。
[waki@serv1$ kumoctl serv1 status hash space timestamp: Fri Aug 13 19:57:04 -0400 2010 clock 43217 attached node: 192.168.47.101:19800 (active) 192.168.47.102:19800 (active) 192.168.47.103:19800 (active) 192.168.47.200:19800 (active) not attached node:
4台とも正常に動作しています。
それでは、
サーバ | kumo-manager | kumo-server | kumo-gateway |
---|---|---|---|
serv1 | ○ | ○ | - |
serv2 | →停止 | →停止 | - |
serv3 | - | ○ | ○ |
serv4 | - | →停止 | - |
まずserv2を停止させました。statusを確認すると、
[waki@serv1 $ kumoctl serv1 status
hash space timestamp:
Sat Aug 14 00:23:30 -0400 2010 clock 51211
attached node:
192.168.47.101:19800 (active)
192.168.47.102:19800 (fault)
192.168.47.103:19800 (active)
192.168.47.200:19800 (active)
not attached node:
新たにキー:hoge、
続けてserv4も停止させます。
[waki@serv1$ kumoctl serv1 status
hash space timestamp:
Sat Aug 14 00:41:05 -0400 2010 clock 51746
attached node:
192.168.47.101:19800 (active)
192.168.47.102:19800 (fault)
192.168.47.103:19800 (active)
192.168.47.200:19800 (fault)
not attached node:
2台いなくなってもデータの登録、
次に、
[waki@hadoop1 $ kumohash -m hadoop1 assign hoge 44f81bcbdb0df331 hoge 0: 192.168.47.102:19800 1: 192.168.47.103:19800 2: 192.168.47.200:19800
serv2が落ちいてるはずなのに、
kumofsの分散ロジックにはconsistent hashingというロジックが使われており、
それでは元の4台構成に戻してみましょう。serv2, serv4のデータベースファイルを削除し、
[waki@serv1$ kumoctl serv1 status hash space timestamp: Sat Aug 14 01:54:43 -0400 2010 clock 53970 attached node: 192.168.47.101:19800 (active) 192.168.47.102:19800 (active) 192.168.47.103:19800 (active) 192.168.47.200:19800 (active) not attached node:
無事復活しました。データの登録、
このような感じで使ってみましたが、
これがシンプルなNoSQLと分散環境のなしえる妙ということでしょう。