memcache集群搭建(magent)

搭建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
加入

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 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分布式原理可以参考:http://blog.csdn.net/cutesource/article/details/5848253(分布式设计与开发(六)------让memcached分布式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值