kumofsを使う

最近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

※参考になったサイト
仙石浩明の日記: __sync_bool_compare_and_swap_4 とは何か? ? glibc をビルドする場合は、 gcc の --with-arch=i686 configure オプションを使ってはいけない


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のように、共用サーバやクラウドでのインスタンス貸しをしてみたいものですね。

トラックバック(1)

最近、何かよさげで気になっていた、kumofsをWEBサーバ群に投入すべく、まずは一台のサーバにインストールを行いました。 kumofsの概要 まずは、k... 続きを読む