« 車を買え変えた | メイン | Concept diagram »

2010年1月19日 (火)

kumofsをインストールして遊んでみた。

えとらぼ、分散型ストレージ「kumofs」をオープンソースで公開」の記事を読んで、面白そうだったので遊んで見た。

◯まずはインストール(etolabo / kumofs を参考)

環境:

OS   :CentOS release 5.2 (Final)
GCC  : 4.1.2
Ruby  :1.9.1p378
zlib  :1.2.3-3
OpenSSL :0.9.8e
git  :1.6.6

Tokyo Cabinet

http://1978th.net/tokyocabinet/tokyocabinet-1.4.41.tar.gz をダウンロードしてconfigure/make/make install ・・・インストールは全く問題なし。

MessagePack for C++

# git clone git://git.sourceforge.jp/gitroot/msgpack/msgpack.git
# cd msgpack
# export set CFLAGS=-march=i686     ← この以下3行の実行しました。
# export set CPPFLAGS=-march=i686
# export set CXXFLAGS=-march=i686
# ./bootstrap
# ./configure
# make
# make install

MessagePack for Ruby

# gem install msgpack

kumofs

# git clone git://github.com/etolabo/kumofs.git
# cd kumofs-0.3.0
# export set CFLAGS=-march=i686     ← この以下3行の実行しました。
# export set CPPFLAGS=-march=i686
# export set CXXFLAGS=-march=i686
# ./bootstrap
# ./configure --with-msgpack=/usr/local --with-tokyocabinet=/usr/local
# make
# make install

◯実行と確認
 ※サーバは1台で複数のポートにて実行 ( etolabo / kumofs を参考 )

起動(各コマンドは別ターミナルかscreenにて起動)

# kumo-manager -v -l localhost
# kumo-server  -v -m localhost -l localhost:19801 -L 19901 -s ./kumodb1.tch  ←サーバ0
# kumo-server  -v -m localhost -l localhost:19802 -L 19902 -s ./kumodb2.tch  ←サーバ1 
# kumo-server  -v -m localhost -l localhost:19803 -L 19903 -s ./kumodb3.tch  ←サーバ2
# kumo-gateway -v -m localhost -t 11211

# kumoctl localhost attach       ← kumo-serverを登録する。

確認

# kumoctl localhost status
hash space timestamp:
  2010-01-19 13:58:05 +0900 clock 4297
attached node:
  127.0.0.1:19801  (active)
  127.0.0.1:19802  (active)
  127.0.0.1:19803  (active)
not attached node:

Memcachedのプロトコルで繋げてみる

# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set blogkid 0 0 4   ← key:blogkid / value:test で格納
test
STORED
get blogkid      ← blogkid の key で検索
VALUE blogkid 0 4
test
END

格納されたデータを確認

# kumohash -m localhost assign "blogkid"
901d3eea20fe3a0a  blogkid
  0: 127.0.0.1:19801
  1: 127.0.0.1:19802
  2: 127.0.0.1:19803

障害を発生させてみる。

※全てのサーバに格納されているので、サーバ1とサーバ2を停止する(サーバ0は停止させない)
(起動したkumo-serverをCTRL+Cなどで停止)

# kumoctl localhost status
hash space timestamp:
  2010-01-19 15:16:29 +0900 clock 446
attached node:
  127.0.0.1:19801  (active)
  127.0.0.1:19803  (fault)
  127.0.0.1:19802  (fault)
not attached node:

※データが取得できるか確認
# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get blogkid
VALUE blogkid 0 4
test
END

※データを格納する。(サーバ0のみ起動中)
telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
set tokyo 0 0 5
japan
STORED

※サーバ0を停止させ、サーバ1と2を起動させる。

※起動させてサーバを登録する。
# kumoctl localhost attach   
nil

# kumoctl localhost status
hash space timestamp:
2010-01-19 15:28:22 +0900 clock 820
attached node:
  127.0.0.1:19801  (fault)
  127.0.0.1:19803  (active)
  127.0.0.1:19802  (active)
not attached node:  

"tokyo"のキーで検索する
telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
get tokyo
VALUE tokyo 0 5
japan

こんな感じでなかなか使えます。 http://ficia.com/ にて実績もあるので今後の使う用途があれば十分検討してみようと思います。