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/

make

make   install

 

 

 

 

 

  • 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/

 

[root@i-0boypofz   magent]# make

gcc   -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

 

解决方法:

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'

collect2:   ld returned 1 exit status

make:   *** [magent] 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 模拟一台主的坏掉

 

设置数据:

 

计算机生成了可选文字: 团Telnet192·l阔舆氏斡 \、 日2 pool pool S12e S12e 日2 eocachedagentu日。4 atrixl一>192。1'8。1日O。22:11211, atrixZ一>192。168。1日O。23:11211, HD tdts eocachedagentu日。4 atrixl一>192。168。1日O。22:11211, atrixZ一>192。168。1日O。23:11211, HD etc公日日5 hen讨 TORFD etC公 自LUFc日5 hen讨 HD pool pool . S12e . S12e

 

kill掉一台主

计算机生成了可选文字: 声29 oooo [root@i一石fui幼w96一] 000000 OJ,. rOOt FOOt 9552 [ [ rO0t尽i一 rQ0t@i一 一讨l 19:31 20:10 11一91 repmem n卜 #1 pt 17 OO s/000 25 opt/memcached/bin/memcached一d一uroot一c10000一m8192192.168.100.23一p11211 Fepmem 00grepmem 500.150 9552 ~]# 一ef 20: 1grepmem 10pts/000 666 999 55WWIW 27门气门『80 ,了6.1.16.1 12UUZU 1lfflf OJn』0 FOOt [root尽i-

 

验证数据正常:

 

计算机生成了可选文字: {口4回{. 自LUEc讨05 hen" HD UNSUPPORTEDCOHHnHD getc" U自LUEc"05 chen" FND setc讨1日8 UNSUPPORTEDCOHH自HD setc讨1日08 chen"eil STORED getc讨 U自LUEc讨05 chen讨 FND getc"1 U自LUEc讨108 chen讨eil FHD

 

4.2 模拟第二台主机也down

 

计算机生成了可选文字: tr66恤1一r沛乏1云花 卜亏『 00.150 kp rOOt FOOt 14185 grepmem , 1425711071 一efl 20:10 20:12 00:00:00 QO:QO:QO root位渔一rZpZ渔t渔c rQ0t尽,一rzpZ,tlc 11一9 pts/0 14185 /opt/memcached/bln/memcached一d一uroot一c10000一m8192192.168.100.22一p11211 grepmem FOOt 1426311071 一ef 20: mem [root尽i一rzpZitic一]#. 1grepmem 12pts/000:00:00grep

 

验证数据,读写都正常。

计算机生成了可选文字: 团Telnet192.168. 少L,'~~~~ 100.2钻 匕火了苏忆二二〕〔〕 乍 ]HSUPPORTFDCOHHnND tats enCaChed atrixl atrixZ HD etC讨 自LUFC公 hen" HD etc讨1 自LUFC衬1 hen讨e11 agentu艺。怪 一>192。168。1日0。22:11211,poolsizel 一>192。168。1日0。23:11211,poolsize日 日S 日8 hC刁JLC.IC'.10,}.1 CXX讨公e公eP讨e 5a.1.1CF讨CE讨C讨PC讨 不Crr11n11nnlln anttDtLeDtLeDteSte 不eaaHe自hHe自hHe卜He卜 沼―劝―腼―加』四匕脚』卜卜汀叹―』尸刀 HSUPPORTFDCO日HnHD etc讨2日日? etc公2日日8 卜en讨ei1CLIFHT一ERRORbaddatac卜unk STORFD getc公2 U自LUFC衬2日? Chen讨ei FHD

 

4.3 模拟三台都宕机

 

magent无法读取数据

计算机生成了可选文字: 口Telnet192.168.100.24 nenCaChed nat护iXI natriXZ EHD getc袱t agentu日。4 日目 一>1,2。168。1日日。22:11211,Pool 一>1,2。168。1日日。23:11211,Pool S12e S12e f卜

 

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

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

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

计算机生成了可选文字: 。Te.ne八92,16迹画 UnLUEC付02 C付 END getc.1 FHD

 


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



相关文章
|
8月前
|
网络协议 开发工具
搭建memcached 主主复制+keepalived 高可用
搭建memcached 主主复制+keepalived 高可用
|
4月前
|
Linux Memcache
Linux - 安装memcached
Linux - 安装memcached
49 0
Linux - 安装memcached
|
5月前
|
Docker 容器
Docker下安装memcached
Docker下安装memcached
50 0
|
8月前
|
Shell C语言
脚本用源码来安装 memcached 服务器
脚本用源码来安装 memcached 服务器
34 1
|
9月前
|
Java 程序员
【memcached】下载、安装、、出错一分钟全搞定
【memcached】下载、安装、、出错一分钟全搞定
126 0
|
PHP
安装memcached 和 php-memcached 实现PHP访问memcached
安装memcached 和 php-memcached 实现PHP访问memcached
83 0
安装memcached 和 php-memcached 实现PHP访问memcached