87898 发表于 2016-11-4 08:26:15

memcached+magent组成高可用

简介:   使用magent架设memcached高可用,当主的挂掉以后,备机可以继续使用。
               magent                   |----------------------------------------|                   |                  |memcached1   memcached2         memcached3 (master)       (master)             (backup)


一 安装memcached   下载下面安装包libevent-2.0.21-stable.tar.gzmemcached-1.4.32.tar.gzmagent-0.5.tar.gz



[*]安装libevent



tar –xzvf libevent-2.0.21-stable.tar.gzcd   libevent-2.0.21-stable./configure –prefix=/usr/local/libeventmakemake   install



[*]安装memcached



tar –xzvf memcached-1.4.32cd   memcached-1.4.32./configure   --prefix=/opt/memcached --with-libevent=/usr/local/libevent/makemake   install






[*]magent安装

下载安装包文件magent-0.5.tar.gz解压tar –xzvf magent-0.5.tar.gz
make   #执行编译安装
把编译好的magent拷贝到/opt/memcached/bin/ 目录下



[*]安装报错解决方案



# makegcc   -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.cmagent.c:71:19:   error: event.h: No such file or directorymagent.c:130: error: field ‘ev’ has incomplete typemagent.c:161: error: field ‘ev’ has incomplete typemagent.c: In function ‘server_free’:magent.c:494:   warning: implicit declaration of function ‘event_del’magent.c:   In function ‘pool_server_handler’:magent.c:514: error: ‘EV_READ’ undeclared (first use in this function)magent.c:514:   error: (Each undeclared identifier is reported only once
# 解决办法,检查下libevent安装路径,如果自定义安装了,拷贝下路径库。ln -s /usr/lib/libevent*/usr/lib64/
# makegcc   -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
#libm.a不存在的时候,需要拷贝下面so,如果没有,需要安装glibc glibc-develcp   /usr/lib64/libm.so /usr/lib64/libm.a
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':/root/libevent-2.0.21-stable/event.c:370:   undefined reference to `clock_gettime'/usr/lib64/libevent.a(event.o):   In function `detect_monotonic':/root/libevent-2.0.21-stable/event.c:340:   undefined reference to `clock_gettime'collect2:   ld returned 1 exit statusmake:   *** Error 1
解决方法:
vi   MakefileCFLAGS   = -Wall -g -O2 -I/usr/local/include $(M64)改为:    CFLAGS   = -lrt -Wall -g -O2 -I/usr/local/include $(M64)


# make       gcc   -lrt -Wall -g -O2 -I/usr/local/include    -o magent magent.o ketama.o -leventketama.o:   In function `create_ketama':/root/magent5/ketama.c:399:   undefined reference to `floorf'collect2:   ld returned 1 exit statusmake:   *** Error 1
解决办法:vi   Makefile
LIBS =   -levent –lm




三 启动

[*]启动memcached



/opt/memcached/bin/memcached   -d -u root -c 10000 -m 8192 192.168.100.22 -p 11211



[*]启动magent



/opt/memcached/bin/magent   -u root -n 102400 -l 192.168.100.24 -p 12001 -s   192.168.100.22:192.168.100.23:11211 -b 192.168.100.24:11211



四 测试
4.1 模拟一台主的坏掉
设置数据:
页: [1]
查看完整版本: memcached+magent组成高可用