kumofsの登場
前回は、TokyoCabinetを単体で動作させてみました。今回はTokyoCabinetを分散環境で動かしてみたいと思います。
TokyoCabinetのデータベースエンジン+分散フレームワークの構成で構築されたアプリケーションがkumofsになります。こちらにkumofsのドキュメントがありますが、kumofsの特色をいくつかご紹介したいと思います。
それでは実際に環境を構築してみましょう。
kumofsのインストール
環境は前回インストールしたマシンと同様です。
OS | CentOS_5.4(32ビット) |
必要なライブラリなど | Linux | 2.6.18 |
g++ | 4.1 |
ruby | 1.8.6 |
Tokyo_Cabinet | 1.4.10 |
MessagePack_for_C++ | 0.3.1 |
MessagePack_for_Ruby | 0.3.1 |
libcrypto_(openssl) |
zlib |
基本的にkumofsのドキュメントに書かれているインストールガイドのまま進めていきます。TokyoCabinetのインストールは前回済んでいますね。まだの方は前回を参考にしてください。以下に、私の環境で必要だったものを記述しておきます。参考にしてください。
g++はCentOSの場合は、以下のようにインストールします。
rubyのインストールは以下のように行います。
gemのインストールは以下のように行います。
libcrypt(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台となります。
serv2でkumo-managerが起動するまでコネクションエラーが発生していますが、serv2で起動した後はお互いがconnectedな状態になっています。ポートは19700を使用するようです。
kumo-serverの起動
続いてkumo-serverの起動をします。
それぞれのサーバで19800ポートを使用してkumo-serverが起動しました。
kumo-serverの登録
kumo-serverは起動しましたが、kumoctlコマンドを使ってkumo-managerに登録という作業が必要になるようです。
kumo-serverの3台が見えていますが、not attached(登録されていない)状態です。これらを登録しましょう。
確認してみます。
すべて登録されました!
kumo-gatewayの起動
ここではserv3をアプリケーションを動かすホストとして動作させます。
続けてポートが開いてるか確認してみます。
大丈夫そうです。11211ポートが開放されていますね。これでアプリケーションを動かすホストとしては、ローカルにmemcachedが立ち上がっているのと同じように見えています。
kumofsを使ってみる
それではperlを使用して実際にkumofsを使用してみましょう。
kumofsはバックエンドにTokyoCabinetを使用していますが、データのやりとりのプロトコルはmemcachedと同じモノを使用しています。そのため、特別なクライアントが必要なわけではなく、memcachedクライアントがあれば使用することが可能となります。今回kumo-gatewayが動いているのはserv3になりますので、serv3で次のようなスクリプトを動かしてみます。
memcacheのモジュールをuseします。
localhostの11211ポートを指定してインスタンスを生成します。localhostの11211ポートは先ほどkumo-gatewayでオープンされたポートですね。
putしてget。
ちゃんと
が表示されました。
perlから見るとローカルホストのmemcachedとしてしか見えていませんが、そのバックエンドでは実は3台のサーバに分散されているということになります。不思議な感じですね!
次回はもう少し踏み込んで、アベイラビリティ、スケーラビリティについて操作をしてみたいと思います。