memcache集群搭建(magent)

来源:互联网 发布:淘宝上的狗狗能买吗 编辑:程序博客网 时间:2024/05/19 20:22

搭建memcached集群时,网上大多数推荐使用magent

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

<span style="font-family:Microsoft YaHei;font-size:14px;">mkdir magentcd magent/tar zxvf magent-0.5.tar.gz/sbin/ldconfigsed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefilemakecp 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
加入

1
2
3
#ifndef SSIZE_MAX
# define SSIZE_MAX      32767
#endif

错误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

1
CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)

改为:


CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)


使用实例:

<span style="font-family:Microsoft YaHei;font-size:14px;">memcached -m 200 -u root -d -l 192.168.202.191 -p 11211memcached -m 200 -u root -d -l 192.168.202.192 -p 11212memcached -m 200 -u root -d -l 192.168.202.193 -p 11213magent -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分布式原理可以参考:http://blog.csdn.net/cutesource/article/details/5848253(分布式设计与开发(六)------让memcached分布式)

0 0
原创粉丝点击