天天看点

memcached+magent组成高可用

简介:

     使用magent架设memcached高可用,当主的挂掉以后,备机可以继续使用。

                 magent

                   |

----------------------------------------

|                   |                  |

memcached1     memcached2           memcached3

 (master)       (master)             (backup)

一 安装memcached

   下载下面安装包

libevent-2.0.21-stable.tar.gz

memcached-1.4.32.tar.gz

magent-0.5.tar.gz

安装libevent

tar –xzvf libevent-2.0.21-stable.tar.gz

cd   libevent-2.0.21-stable

./configure –prefix=/usr/local/libevent

make

make   install

安装memcached

tar –xzvf memcached-1.4.32

cd   memcached-1.4.32

./configure   --prefix=/opt/memcached --with-libevent=/usr/local/libevent/

magent安装

下载安装包文件magent-0.5.tar.gz

解压tar –xzvf magent-0.5.tar.gz

make   #执行编译安装

把编译好的magent拷贝到/opt/memcached/bin/ 目录下

安装报错解决方案

[root@i-0boypofz   magent]# make

gcc   -Wall -g -O2 -I/usr/local/include -m64 -c -o magent.o magent.c

magent.c:71:19:   error: event.h: No such file or directory

magent.c:130: error: field ‘ev’ has incomplete type

magent.c:161: error: field ‘ev’ has incomplete type

magent.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/

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

解决方法:

vi ./ketama.h  

#在开头加入   

#ifndef SSIZE_MAX 

#define SSIZE_MAX        32767 

#endif

#libm.a不存在的时候,需要拷贝下面so,如果没有,需要安装glibc glibc-devel

cp   /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 status

make:   *** [magent] Error 1

vi   Makefile

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

改为:   

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

[root@i-0boypofz   magent5]# make       

gcc   -lrt -Wall -g -O2 -I/usr/local/include    -o magent magent.o ketama.o -levent

ketama.o:   In function `create_ketama':

/root/magent5/ketama.c:399:   undefined reference to `floorf'

解决办法:

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 模拟一台主的坏掉

设置数据:

kill掉一台主

验证数据正常:

4.2 模拟第二台主机也down

验证数据,读写都正常。

4.3 模拟三台都宕机

magent无法读取数据

4.4 模拟主机down掉一台,启动主机,查看数据是否丢失

测试检查丢失了一条数据。

所以当主down以后,不要立即启动主,需要非工作时间处理。

本文转自 woshiwei201 51CTO博客,原文链接:http://blog.51cto.com/chenwei/1869124

继续阅读