最近KVS(Key-Value-Storage)が流行っていますが、うちの研究所においても「えとらぼ」さんと共同でkumofsの研究をしています。
色々とバギーなところも多いのですが、最新パッチを頂きながら、それなりに成果が出てきたようです。
kumofsの詳細については、さくらインターネット研究所に任せることにして、今回は一般にソースが公開されたこともあるので個人的にインストールした際のログを紹介します。
1. まず関連する諸ライブラリのインストール
libtoolのインストール
# yum install libtool
OpenSSLのインストール
# yum install openssl-devel
BZip2ライブラリのインストール(tokyo cabinetインストールのために必要)
# yum install bzip2-devel
2. msgpackのインストール
ダウンロード
http://msgpack.sourceforge.jp/
私は、msgpack-0.4.0.tar.gzをダウンロードしました。
ここで注意!
私の環境で ./configure && make した際、インストールは無事完了したものの、いざライブラリを使おうと思うと、__sync_sub_and_fetch_4が無いとのエラーが出ました。
kumofsの./configureをconfig.logより
configure:19500: checking for main in -lmsgpack configure:19524: gcc -o conftest -O4 -Wall -O4 -L/usr/local/lib/ -mtune=i386 conftest.c -lmsgpack -lcrypto -lz -lpthread -lstdc++ >&5 /usr/local/lib/libmsgpackc.so.2: undefined reference to `__sync_sub_and_fetch_4' collect2: ld returned 1 exit status configure:19530: $? = 1 |
__sync_sub_and_fetchというのは、マルチスレッド環境下においてアトミックな加算処理を行うためのgcc組み込み関数ですが、なぜか_4が付いてしまっています。
これはgccの仕様で、引数の型を見て、その型のビット長を付けるためだと分かりました。
例えば今回の場合、4バイトなので 「_4」 をつけられています。
まあ、これはいいのですが、-march=i686をつければgccの挙動が変わるとのことなので、msgpackの./configure前には CFLAGSとCPPFLAGSにセットしておくことで回避しました。
# tar xvfz msgpack-0.4.0.tar.gz
# cd msgpack-0.4.0
# export set CFLAGS=-march=i686
# export set CPPFLAGS=-march=i686
# ./configure
# make
# make install
3. tokyo cabinet のインストール
http://1978th.net/tokyocabinet/
私は、バージョン1.4.41をダウンロードしました。
# tar xvfz tokyocabinet-1.4.41.tar.gz
# cd tokyocabinet-1.4.41/
# ./configure
# make
# make install
4. kumofsのインストール
ダウンロードは、古橋さんのサイトからできます。
http://d.hatena.ne.jp/viver/20100118/p1
私は、githubよりkumofs-0.3.0 をダウンロードしました。
次に /usr/local/lib がライブラリに含まれるよう、環境変数をセット。
(私の場合、新しい環境だったので、これがないと cannot find -lmsgpack となりました)
# export set LDFLAGS=-L/usr/local/lib
早速ビルドを開始
# ./bootstrap
# ./configure
# make
# make install
とりあえず、インストールは完了したようです。
早速起動と行きたいところですが、また時間を見つけてクラスターを組んでみたいと思います。
なお、うちの研究所では型落ちのサーバを山のように用意して、実験をしているようですので、パフォーマンスなど実際のレポートは、そちらを期待してください。
私のほうでは、とりあえず画像生成サイトなど、個人的にやっているいくつかのサイトのバックエンドを、kumofsにしてみようかと思っています。
Apache用のmod_kumofsとかを作って、kumofsに格納されたバリューを、直接クライアントに返すなんてこともやってみたいところです。
将来的には、mysqlのように、共用サーバやクラウドでのインスタンス貸しをしてみたいものですね。