memcached 和它的代理

jopen 11年前
1.编译libevent
./configure --prefix=xxx
make && make install

2.编译memcached
./configure --prefix=xxx
make && make install

3.启动memcached
服务器端的命令为:
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid

-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,

想开机自动启动的话,只需在/etc/rc.d/rc.local中加入一行,上面命令
有人用以下命令:
/usr/local/memcached/bin/memcached -d -m 20 -p 11211 -u apache
上面有些东西可以参考一下:即,ip不指定时,默认是本机,用户,最好选择是:apache 或 deamon
这样,也就是属于哪个用户的服务,由哪个用户启动。

4.memcached退出
kill `cat /tmp/memcached.pid`

5.安装libmemcached
./configure --prefix=/xxxx/libmemcached --with-memcached=/xxxx/memcached/bin/memcached
make && make install

--with-memcached 选项要指定到memcached可执行文件
gcc是4.1,因此只能用老版本libmemcached(选了libmemcached-0.50)

6.使用
pythom-memcached下载链接不可用 ( http://www.tummy.com/software/python-memcached/)
改用
 
7.安装magent

0.5版本:
mkdir magent
cd magent/
wget http://memagent.googlecode.com/files/magent-0.5.tar.gz
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 ../

0.6版本:
不需要额外操作,直接执行make即可

8.配置转发
在memcached的bin/目录
./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

- 分别在11211、11212、11213端口启动3个Memcached进程,在12000端口开启magent代理程序;
- 11211、11212端口为主Memcached,11213端口为备份Memcached;
- 连接上12000的magent,set key1和set key2,根据哈希算法,key1被写入11212和11213端口的Memcached,key2被写入11211和11213端口的Memcached;
- 当11211、11212端口的Memcached死掉,连接到12000端口的magent取数据,数据会从11213端口的Memcached取出;
- 当11211、11212端口的Memcached重启复活,连接到12000端口,magent会从11211或11212端口的 Memcached取数据,由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)。

9.测试流程

参照  http://blog.s135.com/post/393/  其中使用的是magent-0.5

我尝试了0.5和最新的0.6,但里面提到的重启后的” 由于这两台Memcached重启后无数据,因此magent取得的将是空值,尽管11213端口的Memcached还有数据(此问题尚待改进)“,仍然存在