Home

技術系のメモと日々の雑感

Kai で Key-Value ストア環境を作ってみる

テストで Key-Value ストアの環境を作ることになった。
オープンソースのものを探した結果、Kai でいくことに決定。

gihyo.jp の手順がとても詳しいので参考にさせていただいた。
ベースは CentOS 5.4。
まずは Erlang を入れる。
ざっと調べた限り CentOS 用のパッケージは見当たらなかったのでソースから。

# cd /usr/local/src
# wget http://www.erlang.org/download/otp_src_R13B04.tar.gz
# tar zxvf otp_src_R13B04.tar.gz
# cd otp_src_R13B04
# ./configure --enable-threads --enable-kernel-poll --enable-smp-support ¥
  --enable-hipe --disable-jinterface --prefix=/usr/local/erlang
# make
# make install

すんなり入った。
パスを通すよう手順に書いてあるので素直に従う。

# sed -i 's/^PATH.*/PATH=¥$PATH:¥$HOME¥/bin:¥/usr¥/local¥/erlang¥/bin/' ~/.bash_profile
# . ~/.bash_profile

続いて Kai のインストール。
コンパイルしたディレクトリがそのままインストール先となるそうだ。

# cd /usr/local/src
# wget http://sourceforge.net/projects/kai/files/kai/0.4.0/kai-0.4.0.tar.gz/download
# cd /usr/local
# tar zxvf src/kai-0.4.0.tar.gz
# mv kai-0.4.0 kai
# cd kai
# make

これも特に問題なし。
では、Kai を起動してみよう。

# erl -pa ebin -config kai -kai n 1 -kai r 1 -kai w 1 -eval 'application:start(kai).'
Erlang R13B04 (erts-5.7.5) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.5 (abort with ^G)
1> 2010-04-22 13:50:11.275223 [info] (<0.43.0>) ./kai_hash.erl:183: {update,
        [{{{127,0,0,
        1},
        11011},
        [{number_of_virtual_nodes,
        128}]}],
        []}
1>

よしよし、うまくいったみたいだね。
telnet でつないでテストしたら、ちゃんとデータを set して get できた。
ところで、Kai のデフォルトの設定では、データをメモリ上に置くらしい。
複数台のサーバでクラスタを組めば問題ないらしいけど、今回のテスト環境ではそんな贅沢はできないので、ひとまずディスクに置くようにしておく。

# cd /usr/local/kai
# mkdir data
# cat > kai_dets.config <<'EOT'
[{kai, [
    {rpc_port, 11011},
    {rpc_max_processes, 30},
    {memcache_port, 11211},
    {memcache_max_processes, 10},
    {max_connections, 32},
    {n, 1},
    {r, 1},
    {w, 1},
    {number_of_buckets, 1024},
    {number_of_virtual_nodes, 128},
    {store, dets},
    {dets_dir, "/usr/local/kai/data"},
    {number_of_tables, 256}
]}].
EOT

これで準備ができた。
設定を有効にするために起動しなおしておこう。

1> q().
ok
# erl -pa ebin -config kai_dets -eval 'application:start(kai).'


さて、今度はクライアント側の設定。
PHP から使えるようにしたい。
調べてみると、PHP の memcache エクステンションを使うのが簡単のようだ。

# cd /usr/local/src
# wget http://pecl.php.net/get/memcache-2.2.5.tgz
# tar zxvf memcache-2.2.5.tgz
# cd memcache-2.2.5
# phpize
# ./configure --enable-memcache
# make
# cp modules/memcache.so /usr/local/lib
# echo 'extension=memcache.so' >> /usr/local/lib/php.ini

PHP 本体もソースから入れてあったので特に引っかかるところはなかった。
サンプルスクリプトも書いておく。

# cd /tmp
# cat > kai_sample.php <<'EOT'
<?php
$host = "localhost";
$port = 11211;
$memcache = new Memcache;
$memcache->connect($host, $port) or die ("Could not connect");
$memcache->set('hoge', rand());
$val = $memcache->get('hoge');
print_r($val."¥n");
?>
EOT

今回はここまで。
あ〜、やっぱりクラスタ組んでみたいなぁ。

この記事に対するトラックバック

この記事のトラックバックURL

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/22(日) 03:53:10

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/10(火) 23:46:18

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/10(火) 11:09:07

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/07(土) 06:05:01

-

管理人の承認後に表示されます

  • From: |
  • 2013/12/06(金) 02:11:14

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/29(金) 05:26:06

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/27(水) 23:12:55

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/07(木) 02:10:13

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/06(水) 19:57:15

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/06(水) 17:35:16

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/06(水) 10:43:17

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/05(火) 11:52:09

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/04(月) 19:11:14

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/03(日) 02:36:42

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/02(土) 04:19:38

-

管理人の承認後に表示されます

  • From: |
  • 2013/11/01(金) 02:37:16

-

管理人の承認後に表示されます

  • From: |
  • 2013/05/07(火) 23:34:47

-

管理人の承認後に表示されます

  • From: |
  • 2013/04/24(水) 02:25:14

-

管理人の承認後に表示されます

  • From: |
  • 2012/07/01(日) 06:38:04

-

管理人の承認後に表示されます

  • From: |
  • 2011/12/06(火) 20:43:39

-

管理人の承認後に表示されます

  • From: |
  • 2011/07/26(火) 22:03:59

-

管理人の承認後に表示されます

  • From: |
  • 2011/07/19(火) 11:21:09

-

管理人の承認後に表示されます

  • From: |
  • 2011/06/22(水) 21:44:26

-

管理人の承認後に表示されます

  • From: |
  • 2011/06/16(木) 09:53:50

この記事に対するコメント

この記事にコメントする

管理者にだけ表示を許可する