簡介:
使用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