簡介:app
使用magent架設memcached高可用,當主的掛掉之後,備機能夠繼續使用。ide
magentmemcached
|測試
----------------------------------------ui
| | |this
memcached1 memcached2 memcached3url
(master) (master) (backup)spa
一 安裝memcachedserver
下載下面安裝包xml
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 模擬一臺主的壞掉
設置數據:
kill掉一臺主
驗證數據正常:
4.2 模擬第二臺主機也down
驗證數據,讀寫都正常。
4.3 模擬三臺都宕機
magent沒法讀取數據
4.4 模擬主機down掉一臺,啓動主機,查看數據是否丟失
測試檢查丟失了一條數據。
因此當主down之後,不要當即啓動主,須要非工做時間處理。