kumofsの登場
前回は、
TokyoCabinetのデータベースエンジン+分散フレームワークの構成で構築されたアプリケーションがkumofsになります。こちらにkumofsのドキュメントがありますが、
それでは実際に環境を構築してみましょう。
kumofsのインストール
環境は前回インストールしたマシンと同様です。
OS | CentOS_ |
|
必要なライブラリなど | Linux | 2. |
g++ | 4. |
|
ruby | 1. |
|
Tokyo_ | 1. |
|
MessagePack_ | 0. |
|
MessagePack_ | 0. |
|
libcrypto_ |
||
zlib |
基本的にkumofsのドキュメントに書かれているインストールガイドのまま進めていきます。TokyoCabinetのインストールは前回済んでいますね。まだの方は前回を参考にしてください。以下に、
g++はCentOSの場合は、
# yum install gcc-c++
rubyのインストールは以下のように行います。
# yum install ruby # yum install ruby-devel
gemのインストールは以下のように行います。
# wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz # tar zxvf rubygems-1.3.1.tgz # cd rubygems-1.3.1 # ruby ./setup.rb
libcrypt
# yum install openssl-devel
kumofsの構成
kumofsは3種類のデーモンで構成されます。
kumo-server | 実際にデータを保存するノード。少なくとも1台必要です。後から追加できます。 |
kumo-manager | kumo-server群を管理するノード。1台または2台で動かします。 |
kumo-gateway | アプリケーションからのリクエストをkumo-serverに中継するプロキシ。アプリケーションを動かすホスト上で1つずつ起動しておきます。 |
ここでもドキュメントのチュートリアルに従って進めていきます。私の環境でも同様に3台のサーバを用いて環境を構築します。
サーバ | kumo-manager | kumo-server | kumo-gateway |
---|---|---|---|
serv1 | ○ | ○ | - |
serv2 | ○ | ○ | - |
serv3 | - | ○ | ○ |
kumofsの起動
kumo-managerの起動
まずkumo-managerを起動します。kumo-managerを起動するのはserv1, serv2の2台となります。
$ kumo-manager -v -l serv1 -p serv2 2010-08-05 20:14:05 ./manager/init.h:43: start manager 192.168.47.101:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:199: connect failed 192.168.47.102:19700: Connection refused 2010-08-05 20:14:07 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:199: connect failed 192.168.47.102:19700: Connection refused 2010-08-05 20:14:07 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:199: connect failed 192.168.47.102:19700: Connection refused 2010-08-05 20:14:07 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:199: connect failed 192.168.47.102:19700: Connection refused 2010-08-05 20:14:07 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:07 ../rpc/client_tmpl.h:199: connect failed 192.168.47.102:19700: Connection refused 2010-08-05 20:14:07 manager/mod_network.cc:240: KeepAlive failed: 2 2010-08-05 20:14:09 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:14:09 ../rpc/client_tmpl.h:187: connect success 192.168.47.102:19700 fd(7) 2010-08-05 20:14:09 manager/framework.cc:69: new node 0 192.168.47.102:19700 2010-08-05 20:14:09 manager/framework.cc:78: partner connected 192.168.47.102:19700
$ kumo-manager -v -l serv2 -p serv1 2010-08-05 20:14:09 ./manager/init.h:43: start manager 192.168.47.102:19700 2010-08-05 20:14:09 manager/framework.cc:69: new node 0 192.168.47.101:19700 2010-08-05 20:14:09 manager/framework.cc:78: partner connected 192.168.47.101:19700
serv2でkumo-managerが起動するまでコネクションエラーが発生していますが、
kumo-serverの起動
続いてkumo-serverの起動をします。
# kumo-server -v -l serv1 -m serv1 -p serv2 -s /var/kumodb.tch 2010-08-05 20:20:21 ./server/init.h:45: start server 192.168.47.101:19800 2010-08-05 20:20:23 ../rpc/client_tmpl.h:157: connecting to 192.168.47.101:19700 2010-08-05 20:20:23 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:20:23 ../rpc/client_tmpl.h:187: connect success 192.168.47.101:19700 fd(10) 2010-08-05 20:20:23 ../rpc/client_tmpl.h:187: connect success 192.168.47.102:19700 fd(11) 2010-08-05 20:20:23 server/framework.cc:74: new node 0 192.168.47.102:19700 2010-08-05 20:20:23 server/framework.cc:74: new node 0 192.168.47.101:19700
# kumo-server -v -l serv2 -m serv1 -p serv2 -s /var/kumodb.tch 2010-08-05 20:23:48 ./server/init.h:45: start server 192.168.47.102:19800 2010-08-05 20:23:50 ../rpc/client_tmpl.h:157: connecting to 192.168.47.101:19700 2010-08-05 20:23:50 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:23:50 ../rpc/client_tmpl.h:187: connect success 192.168.47.102:19700 fd(11) 2010-08-05 20:23:50 ../rpc/client_tmpl.h:187: connect success 192.168.47.101:19700 fd(10) 2010-08-05 20:23:50 server/framework.cc:74: new node 0 192.168.47.102:19700 2010-08-05 20:23:50 server/framework.cc:74: new node 0 192.168.47.101:19700
# kumo-server -v -l serv3 -m serv1 -p serv2 -s /var/kumodb.tch 2010-08-05 20:25:09 ./server/init.h:45: start server 192.168.47.103:19800 2010-08-05 20:25:11 ../rpc/client_tmpl.h:157: connecting to 192.168.47.101:19700 2010-08-05 20:25:11 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 20:25:11 ../rpc/client_tmpl.h:187: connect success 192.168.47.102:19700 fd(11) 2010-08-05 20:25:11 ../rpc/client_tmpl.h:187: connect success 192.168.47.101:19700 fd(10) 2010-08-05 20:25:11 server/framework.cc:74: new node 0 192.168.47.102:19700 2010-08-05 20:25:11 server/framework.cc:74: new node 0 192.168.47.101:19700
それぞれのサーバで19800ポートを使用してkumo-serverが起動しました。
kumo-serverの登録
kumo-serverは起動しましたが、
# kumoctl serv1 status hash space timestamp: Wed Dec 31 19:00:00 -0500 1969 clock 0 attached node: not attached node: 192.168.47.101:19800 192.168.47.102:19800 192.168.47.103:19800
kumo-serverの3台が見えていますが、
# kumoctl serv1 attach
確認してみます。
# kumoctl serv1 status hash space timestamp: Thu Aug 05 21:01:58 -0400 2010 clock 1437 attached node: 192.168.47.101:19800 (active) 192.168.47.102:19800 (active) 192.168.47.103:19800 (active) not attached node:
すべて登録されました!
kumo-gatewayの起動
ここではserv3をアプリケーションを動かすホストとして動作させます。
$ kumo-gateway -v -m serv1 -p serv2 -t 11211 2010-08-05 21:11:21 ../rpc/client_tmpl.h:157: connecting to 192.168.47.101:19700 2010-08-05 21:11:21 ../rpc/client_tmpl.h:157: connecting to 192.168.47.102:19700 2010-08-05 21:11:21 ../rpc/client_tmpl.h:187: connect success 192.168.47.102:19700 fd(8) 2010-08-05 21:11:21 ../rpc/client_tmpl.h:187: connect success 192.168.47.101:19700 fd(7)
続けてポートが開いてるか確認してみます。
$ netstat -ant | grep 11211 tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
大丈夫そうです。11211ポートが開放されていますね。これでアプリケーションを動かすホストとしては、
kumofsを使ってみる
それではperlを使用して実際にkumofsを使用してみましょう。
kumofsはバックエンドにTokyoCabinetを使用していますが、
#!/usr/bin/perl
use strict;
use Cache::Memcached::Fast;
memcacheのモジュールをuseします。
my $key = "name";
my $c = Cache::Memcached::Fast->new({servers=>['localhost:11211']});
localhostの11211ポートを指定してインスタンスを生成します。localhostの11211ポートは先ほどkumo-gatewayでオープンされたポートですね。
$c->set($key,"wakimoto");
if( my $val = $c->get($key) )
{
print "$key is ", $val,"\n";
}
putしてget。
ちゃんと
name is wakimoto
が表示されました。
perlから見るとローカルホストのmemcachedとしてしか見えていませんが、
次回はもう少し踏み込んで、