2eew 发表于 2016-1-18 09:34:15

magent实现memcache主从

magent+Memcached集群介绍
由于Memcached服务器与服务器之间没有任何通讯,并且不进行任何数据复制备份,所以当任何服务器节点出现故障时,会出现单点故障,如果需要实现HA,则需要通过另外的方式来解决。

通过Magent缓存代理,防止单点现象,缓存代理也可以做备份,通过客户端连接到缓存代理服务器,缓存代理服务器连接缓存连接服务器,缓存代理服务器可以连接多台Memcached机器可以将每台Memcached机器进行数据同步。如果其中一台缓存服务器down机,系统依然可以继续工作,如果其中一台Memcached机器down掉,数据不会丢失并且可以保证数据的完整性。
memcache键值存储:这个存储过程需要程序员来实现。程序员生成key-value。一般memcache用来缓存静态内容。主节点服务停止,程序上要自动调整到备份节点上。主节点服务恢复后缓存需要重新生成。magent是memcache的补充,magent下memcache分主备,主节点分散存储所有的键值数据 ,备节点存储一个完整的所有键值数据。magent解决了memcache的不能节点分布式问题。

软件下载

http://memcached.googlecode.com/files/memcached-1.4.13.tar.gz http://memagent.googlecode.com/files/magent-0.6.tar.gzhttp://monkey.org/~provos/libevent-1.4.9-stable.tar.gz

安装libevent-1.4.9-stable.tar.gztar zxvf libevent-2.0.13-stable.tar.gz cd libevent-2.0.13-stable./configure --prefix=/usr/local/libevent-1.4.9-stablemakemake install
安装memcacdtar zxvf memcached-1.4.13.tar.gz cd memcached-1.4.13./configure --prefix==/usr/local/memcached-1.4.13 --with-libevent=/usr/local/libevent-1.4.9-stablemakemake install

安装magentmkdir /usr/local/magent-0.6 && mv magent-0.6.tar.gz /usr/local/magent-0.6tar zxvf magent-0.6.tar.gz make

memcache命令memcached启动参数描述:
-d :启动一个守护进程,
-m:分配给Memcache使用的内存数量,单位是MB,默认是64MB,
-u :运行Memcache的用户
-l:监听的服务器IP地址
-p :设置Memcache监听的端口,默认是11211    注:-p(p为小写)
-c :设置最大并发连接数,默认是1024
-P :设置保存Memcache的pid文件   注:-P(P为大写)
如果要结束Memcache进程,执行:kill cat pid文件路径

1
2
3
4
5
/usr/local/bin/memcached -d -m 256 -u memcached -l 172.16.11.20 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid
/usr/local/bin/memcached -d -m 256 -u memcached -l 192.168.11.30 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid
/usr/local/bin/memcached -d -m 256 -u memcached -l 192.168.11.40 -p 11211 -c 1024 -P /var/run/memcached/memcached.pid

/usr/local/magent/magent -u root -n 4096 -l 172.16.11.10 -p 11200 -s 172.16.11.20:11211 -s 172.16.11.30:11211 -b 172.16.11.40:11211









报错1:gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.cmagent.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 oncemagent.c:729: error: for each function it appears in.)make: *** Error 1
解决办法:# vi ketama.h #在开头加入#ifndef SSIZE_MAX#define SSIZE_MAX      32767#endif


继续make
报错2:gcc -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.cgcc -Wall -g -O2 -I/usr/local/include -m64 -c -o ketama.o ketama.cgcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a gcc: /usr/lib64/libevent.a: No such file or directorygcc: /usr/lib64/libm.a: No such file or directory

解决办法:# ln -s /usr/lib/libevent*/usr/lib64/# make
报错3:gcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o /usr/lib64/libevent.a /usr/lib64/libm.a gcc: /usr/lib64/libm.a: No such file or directorymake: *** Error 1

解决办法:yum install glibc glibc-devel如果是64bit的系统则不会在/usr/lib64/libm.a 生成,如果是32bit即会有。
# cp /usr/lib64/libm.so /usr/lib64/libm.a继续make

报错4: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 `detect_monotonic':event.c:(.text+0xc79): undefined reference to `clock_gettime'/usr/lib64/libevent.a(event.o): In function `gettime':event.c:(.text+0xd60): undefined reference to `clock_gettime'collect2: ld returned 1 exit statusmake: *** Error 1

解决办法:# vi Makefile CFLAGS = -Wall -g -O2 -I/usr/local/include $(M64)改为:    CFLAGS = -lrt -Wall -g -O2 -I/usr/local/include $(M64)


# makegcc -Wall -g -O2 -I/usr/local/include -m64 -o magent magent.o ketama.o -lrt /usr/lib64/libevent.a /usr/lib64/libm.a # ls                                                                                             成功Makefileketama.cketama.hketama.omagentmagent-0.6.tar.gzmagent.cmagent.o
页: [1]
查看完整版本: magent实现memcache主从