cckj 2009-1-21 23:35
magent使用小记
原文链接:[url=http://blog.s135.com/post/393.htm][color=#4f6371]http://blog.s135.com/post/393.htm[/color][/url]
magent是一款开源的Memcached代理服务器软件,其项目网址为:
[url=http://code.google.com/p/memagent/][color=#4f6371]http://code.google.com/p/memagent/[/color][/url]
一、安装步骤:
1、编译安装libevent:
wget [url=http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz][color=#4f6371]http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz[/color][/url]
tar zxvf libevent-1.4.9-stable.tar.gz
cd libevent-1.4.9-stable/
./configure --prefix=/usr
make && make install
cd ../
2、编译安装Memcached:
wget [url=http://danga.com/memcached/dist/memcached-1.2.6.tar.gz][color=#4f6371]http://danga.com/memcached/dist/memcached-1.2.6.tar.gz[/color][/url]
tar zxvf memcached-1.2.6.tar.gz
cd memcached-1.2.6/
./configure --with-libevent=/usr
make && make install
cd ../
3、编译安装magent:
mkdir magent
cd magent/
wget [url=http://memagent.googlecode.com/files/magent-0.5.tar.gz][color=#4f6371]http://memagent.googlecode.com/files/magent-0.5.tar.gz[/color][/url]
tar zxvf magent-0.5.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make
cp magent /usr/bin/magent
cd ../
二、使用实例:
memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 127.0.0.1:11211 -s 127.0.0.1:11212 -b 127.0.0.1:11213
1、分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
2、11211、11212端口为主Memcached,11213端口为备份Memcached;
3、连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11212和11213端口的Memcached;
4、当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
5、当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。
三、整个测试流程:
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]stats[/color]
memcached agent v0.4
matrix 1 -> 127.0.0.1:11211, pool size 0
matrix 2 -> 127.0.0.1:11212, pool size 0
END
[color=#008000]set key1 0 0 8[/color]
[color=#008000]zhangyan[/color]
STORED
[color=#008000]set key2 0 0 8[/color]
[color=#008000]zhangyan[/color]
STORED
[color=#008000]quit[/color]
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]get key1[/color]
END
[color=#008000]get key2[/color]
VALUE key2 0 8
zhangyan
END
[color=#008000]quit[/color]
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11212
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]get key1[/color]
VALUE key1 0 8
zhangyan
END
[color=#008000]get key2[/color]
END
[color=#008000]quit[/color]
Connection closed by foreign host.
[root@centos52 ~]# telnet 127.0.0.1 11213
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]get key1[/color]
VALUE key1 0 8
zhangyan
END
[color=#008000]get key2[/color]
VALUE key2 0 8
zhangyan
END
[color=#008000]quit[/color]
Connection closed by foreign host.
[color=#ff0000]模拟11211、11212端口的Memcached死掉[/color]
[root@centos52 ~]# ps -ef | grep memcached
root 6589 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
root 6591 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
root 6593 1 0 01:25 ? 00:00:00 memcached -m 1 -u root -d -l 127.0.0.1 -p 11213
root 6609 6509 0 01:44 pts/0 00:00:00 grep memcached
[root@centos52 ~]# kill -9 6589
[root@centos52 ~]# kill -9 6591
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]get key1 [/color]
VALUE key1 0 8
zhangyan
END
[color=#008000]get key2[/color]
VALUE key2 0 8
zhangyan
END
[color=#008000]quit[/color]
Connection closed by foreign host.
[color=#ff0000]模拟11211、11212端口的Memcached重启复活[/color]
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11211
[root@centos52 ~]# memcached -m 1 -u root -d -l 127.0.0.1 -p 11212
[root@centos52 ~]# telnet 127.0.0.1 12000
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
[color=#008000]get key1[/color]
END
[color=#008000]get key2[/color]
END
[color=#008000]quit[/color]
Connection closed by foreign host.