天天看點

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

繼續閱讀