您的位置:首页 > 数据库 > Memcache

memcache集群搭建(magent)

2014-09-03 15:31 435 查看
搭建memcached集群时,网上大多数推荐使用magent

安装完memcached之后,编译安装magent

<span style="font-family:Microsoft YaHei;font-size:14px;">mkdir magent
cd magent/
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</span>


可能会遇到错误

错误1:

gcc -lrt -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c

magent.c: In function ‘writev_list’:

magent.c:729: error: ‘SSIZE_MAX’ undeclared (first use in this function)

magent.c:729: error: (Each undeclared identifier is reported only once

magent.c:729: error: for each function it appears in.)

make: *** [magent.o] Error 1

解决办法:

vim ketama.h

加入

错误2:

gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c

gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o ketama.o ketama.c

gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a

/usr/lib64/libevent.a(event.o): In function `gettime’:

(.text+0×449): undefined reference to `clock_gettime’

/usr/lib64/libevent.a(event.o): In function `event_base_new’:

(.text+0x72a): undefined reference to `clock_gettime’

collect2: ld returned 1 exit status

make: *** [magent] Error 1

解决办法

vim Makefile

改为:

使用实例:

<span style="font-family:Microsoft YaHei;font-size:14px;">memcached -m 200 -u root -d -l 192.168.202.191 -p 11211
memcached -m 200 -u root -d -l 192.168.202.192 -p 11212
memcached -m 200 -u root -d -l 192.168.202.193 -p 11213
magent -u root -n 51200 -l 127.0.0.1 -p 12000 -s 192.168.202.191:11211 -s 192.168.202.192:11212 -b 192.168.202.193:11213</span>
<span style="font-family:Microsoft YaHei;font-size:14px;">
</span>


-u root:以root用户启动

-n 51200:并发数51200

-l 127.0.0.1:监听的IP是127.0.0.1

-p 12000:端口是 12000

-s 127.0.0.1:127.0.0.1是正在运行的memcached,端口分别为11211和11212,生产中一般为两台物理机器

-b 127.0.0.1:127.0.0.1是备份的memcached,端口为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还有数据(此问题尚待改进)。

安装启动完成后,使用telnet连接magent和不同节点上的memcached进行简单的set操作,发现数据可以正确的分布到集群中,表示集群搭建成功。

但是使用Java客户端(java memcached client)访问的话,则会出问题(原因不明,可能是magent版本过于老旧),所以如果编写Java程序访问memcached,使用客户端自带的集群功能(在之前的博客中提到过http://blog.csdn.net/sole_cc/article/details/38112541)。

参考文章:http://blog.csdn.net/zenwong/article/details/6708715 http://blog.haohtml.com/archives/12157 http://blog.haohtml.com/archives/12145
关于memcache分布式原理可以参考:/article/1684702.html(分布式设计与开发(六)------让memcached分布式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: