博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
memcache集群搭建(magent)
阅读量:4120 次
发布时间:2019-05-25

本文共 2696 字,大约阅读时间需要 8 分钟。

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

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

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
可能会遇到错误

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

使用实例:

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

-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()

你可能感兴趣的文章
iWatch报错: Authorization request cancled
查看>>
iWatch报错: Authorizationsession time out
查看>>
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>
Error: An App ID with identifier "*****" is not avaliable. Please enter a different string.
查看>>
X-code beta 开发iWatch项目,运行没有错误,但是某些操作一点就崩,而且找不错误的原因场景一
查看>>
Xcode 报错: Extra argument in call
查看>>
iTunes Connect 上传APP报错: Communication error. please use diagnostic mode to check connectivity.
查看>>
#import <Cocoa/Cocoa.h> 报错 Lexical or Preprocessor Issue 'Cocoa/Cocoa.h' file not found
查看>>
`MQTTClient (~> 0.2.6)` required by `Podfile`
查看>>
X-Code 报错 ld: library not found for -lAFNetworking
查看>>
Bitcode
查看>>
If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
查看>>
3.5 YOLO9000: Better,Faster,Stronger(YOLO9000:更好,更快,更强)
查看>>
iOS菜鸟学习--如何避免两个按钮同时响应
查看>>
How to access the keys in dictionary in object-c
查看>>
iOS菜鸟学习—— NSSortDescriptor的使用
查看>>
hdu 3787 hdoj 3787
查看>>
hdu 3790 hdoj 3790
查看>>
hdu 3789 hdoj 3789
查看>>