memcached+magent組成高可用

 

簡介: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 模擬一臺主的壞掉

 

設置數據:

 

計算機生成了可選文字: 團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

相關文章
相關標籤/搜索