memcached proxy. unix domain socketで起動できて、分散も簡単にできるらしい
memcachedのかわりにkyototycoon でmemcached互換モードで起動していれば、そのままmagent経由でkyototycoonを使うことができる
これらがなければインストールしておく
インストールは以下で
試してみてわかったことだが、v0.6はconsistent hashingの実装にbugがあるようだ。特定のサーバにしかkeyが保存されない。
http://saylinux.net/story/002295/magent-memcached-...とかhttp://blog.s135.com/post/393/ v0.5だと試した限りうまく振り分けられる。
githubにv0.7?がupされているようだ。
というわけでこれはv0.6の方法となっている。展開すると以下ができる
そのままではmakeできないので、以下を行う
yum install libevent-devel libevent glibc-static
インストールは以下で
cd /usr/local/src mkdir magent cd magent curl -LO http://memagent.googlecode.com/files/magent-0.6.tar.gz tar xvfz magent-0.6.tar.gz
試してみてわかったことだが、v0.6はconsistent hashingの実装にbugがあるようだ。特定のサーバにしかkeyが保存されない。
http://saylinux.net/story/002295/magent-memcached-...とかhttp://blog.s135.com/post/393/ v0.5だと試した限りうまく振り分けられる。
githubにv0.7?がupされているようだ。
というわけでこれはv0.6の方法となっている。展開すると以下ができる
Makefile ketama.c ketama.h magent.c
そのままではmakeできないので、以下を行う
0.5ではいけてたのか?あまり深くは追求しない。とりあえずSSIZE_MAXを定義する
diff ketama.h.org ketama.h 2a3,5 > #ifndef SSIZE_MAX > # define SSIZE_MAX 32767 > #endif
数学系ライブラリ?をリンクするようにする。直接関係ないけどこういうことなんだろう。CFLAGSのところに追加する http://stackoverflow.com/questions/2418157/ubuntu-...
sed -i.org -e "s/\(-Wall\)/\1 -lrt /" Makefile
ここまですればmakeできる
make gcc -Wall -lrt -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.cmagentバイナリが出来るのでこれを適当なところに設置する。とりあえず/usr/local/bin とかにする
cp -p magent /usr/local/bin/
please provide -s "ip:port" argument memcached agent v0.6 Build-Date: Jul 24 2012 15:06:28 Usage: -h this message -u uid -g gid -p port, default is 11211. (0 to disable tcp support) -s ip:port, set memcached server ip and port -b ip:port, set backup memcached server ip and port -l ip, local bind ip address, default is 0.0.0.0 -n number, set max connections, default is 4096 -D don't go to background -k use ketama key allocation algorithm -f file, unix socket path to listen on. default is off -i number, set max keep alive connections for one memcached server, default is 20 -v verbosesでサーバを複数指定して、-kをするとconsistent hashingを実現できる(http://www.hyuki.com/yukiwiki/wiki.cgi?ConsistentH...が詳しい)。アプリケーションからはあくまでmagentがI/Fとなる。もうひとついうとunix domain socketで接続するとtcp connectionのオーバーヘッドを減らすことができる。こんな感じか。
# -p 0はlistenしないという意味。かわりに-fでunix domain socketのpathを指定すること magent -u $uid -g $gid -p 0 -s 127.0.0.1:11211 -f /tmp/magent.sock -D -k -v
memcachedのかわりにkyototycoon でmemcached互換モードで起動していれば、そのままmagent経由でkyototycoonを使うことができる
libevent-devel libevent glibc-staticに加え、glib2-develが必要
githubから取得
とりあえずbinaryはできる。インストールは/home/memagentとかとなっているので、/usr/local/memagent-0.7としたいので
yum instal glib2-devel
githubから取得
cd /usr/local/src git clone git://github.com/wangmh/memagent.git cd memagent make cc -Wall -g `pkg-config --cflags glib-2.0` -c -o magent.o magent.c cc -Wall -g `pkg-config --cflags glib-2.0` -c -o ketama.o ketama.c cc -Wall -g `pkg-config --cflags glib-2.0` -c -o log.o log.c cc -Wall -g `pkg-config --cflags glib-2.0` -o magent magent.o ketama.o log.o -levent -lm -lglib-2.0
とりあえずbinaryはできる。インストールは/home/memagentとかとなっているので、/usr/local/memagent-0.7としたいので
sed -i.org -e 's#home/memagent#usr/local/memagent-0.7#g' Makefile make install (cd /usr/local; ln -s memagent-0.7 memagent)とする
マニュアルなし。以前のバージョンのほうが単純でわかりやすかったのに。とりあえずmagent.cをみてみるとこういうことのようだ
項目 | 値 |
---|---|
daemon_mode | true or false |
logdir | 必須。ちょっといけてない。とりあえず/usr/local/memagent/logとしておく |
verbose_mode | true or false |
useketama | true or false |
port | 11215がdefault。unix domain socketはどうやら機能的にはないらしい?(socketファイルを作る関数は定義されているが実行するところがない) |
host_ip | 未定義だと0.0.0.0となるので127.0.0.1を必ず定義 |
maxidel | max keepalive connectionのこと。 20 default |
maxconns | max connectionのことのようだ。4096 default |
masters | これは配列で定義するようだ ,(カンマ)で区切ればよい |
backups | これもあれば。mastersと同じ |
シンプルに
[General]< #max keep alive connections for one memcached server-< maxidle=20< < #max connection from all clients< maxconns=4096< < #mqagent port;< host_ip=127.0.0.1< < #use ketama consistance hash-< useketama=true< < #daemon mode< daemon_mode=false< < #logfile< logdir=/home/holly/.memagent/log< < masters=127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213<
タグ
最新コメント