日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Magent搭建Memcached集群

發布時間:2023/11/27 生活经验 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Magent搭建Memcached集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://ultrasql.blog.51cto.com/9591438/1636374

?

Memcached集群介紹

?

由于Memcached服務器與服務器之間沒有任何通訊,并且不進行任何數據復制備份,所以當任何服務器節點出現故障時,會出現單點故障,如果需要實現HA,則需要通過另外的方式來解決。

?

通過Magent緩存代理,防止單點現象,緩存代理也可以做備份,通過客戶端連接到緩存代理服務器,緩存代理服務器連接緩存連接服務器,緩存代理服務器可以連接多臺Memcached機器可以將每臺Memcached機器進行數據同步。如果其中一臺緩存服務器down機,系統依然可以繼續工作,如果其中一臺Memcached機器down掉,數據不會丟失并且可以保證數據的完整性。

?

搭建Memcached集群

?

Magent的架構方案已經在上一篇博文《Magent介紹》中有詳細描述。現以如下圖示例架構方案說明Magent如何搭建Memcached集群,而在生產環境需要根據自身業務特點設計健壯的架構方案。

?

?

現有測試機:192.168.11.51/52/68

先在三臺測試機上安裝好libevent和memcached,啟動memcached實例;

然后在51和52上安裝好magent,啟動magent實例。

?

安裝和啟動memcached實例

?

詳細步驟,請參見之前的博文《Memcached 1.4.22安裝和配置》,分別啟動如下實例:

1 2 3 /usr/local/bin/memcached?-d?-m?256?-u?memcached?-l?192.168.11.51?-p?11211?-c?1024?-P?/var/run/memcached/memcached.pid /usr/local/bin/memcached?-d?-m?256?-u?memcached?-l?192.168.11.52?-p?11211?-c?1024?-P?/var/run/memcached/memcached.pid /usr/local/bin/memcached?-d?-m?256?-u?memcached?-l?192.168.11.68?-p?11211?-c?1024?-P?/var/run/memcached/memcached.pid

?

安裝和啟動magent實例

?

筆者在測試magent-0.6.tar.gz時,該版本在與最新版memcached運行下不夠穩定,如下配置以magent-0.5.tar.gz為示例。

?

1. 安裝magent到/usr/local下: ??

1 2 3 4 5 6 cd?/usr/local???? mkdir?magent???? cd?magent???? wget?http://memagent.googlecode.com/files/magent-0.5.tar.gz???? (若無法直接訪問,可先下載安裝包后上傳到服務器上)???? tar?zxvf?magent-0.5.tar.gz

?

2. 修改配置: ??
在ketama.h文件開頭添加 ? ?

1 2 3 #ifndef?SSIZE_MAX???? #define?SSIZE_MAX?32767???? #endif

?

1 2 3 4 ln?-s?/usr/lib64/libm.so?/usr/lib64/libm.a /sbin/ldconfig sed?-i?"s#LIBS?=?-levent#LIBS?=?-levent?-lm#g"?Makefile???? vi?Makefile

?
將 ? ?

1 CFLAGS?=?-Wall?-O2?-g

修改為: ? ?

1 CFLAGS?=?-lrt?-Wall?-O2?-g

保存

?

3. 編譯: ??

1 make

? ?
輸出如下信息: ? ?

1 2 3 gcc?-lrt?-Wall?-O2?-g?-c?-o?magent.o?magent.c???? gcc?-lrt?-Wall?-O2?-g?-c?-o?ketama.o?ketama.c???? gcc?-lrt?-Wall?-O2?-g?-o?magent?magent.o?ketama.o?-levent?–lm

?

4. 查看命令幫助: ??

1 ./magent?–h

? ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 memcached?agent?v0.4?Build-Date:?Apr?21?2015?09:21:10???? Usage:???? -h?this?message???? -u?uid???? -g?gid???? -p?port,?default?is?11211.?(0?to?disable?tcp?support)???? -s?ip:port,?set?memcached?server?ip?and?port???? -b?ip:port,?set?backup?memcached?server?ip?and?port???? -l?ip,?local?bind?ip?address,?default?is?0.0.0.0???? -n?number,?set?max?connections,?default?is?4096???? -D?don't?go?to?background???? -k?use?ketama?key?allocation?algorithm???? -f?file,?unix?socket?path?to?listen?on.?default?is?off???? -i?number,?set?max?keep?alive?connections?for?one?memcached?server,?default?is?20???? -v?verbose

?

5. 啟動magent實例 ??

1 2 /usr/local/magent/magent?-u?root?-n?4096?-l?192.168.11.51?-p?11200?-s?192.168.11.51:11211?-s?192.168.11.52:11211?-b?192.168.11.68:11211???? /usr/local/magent/magent?-u?root?-n?4096?-l?192.168.11.52?-p?11200?-s?192.168.11.51:11211?-s?192.168.11.52:11211?-b?192.168.11.68:11211

?

測試流程

?

登錄51上的magent,存儲key1到key5:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@mongo01?~]#?telnet?192.168.11.51?11200 Trying?192.168.11.51... Connected?to?192.168.11.51. Escape?character?is?'^]'. stats memcached?agent?v0.4 matrix?1?->?192.168.11.51:11211,?pool?size?0 matrix?2?->?192.168.11.52:11211,?pool?size?0 END set?key1?0?0?1 1 STORED set?key2?0?0?2 22 STORED set?key3?0?0?3 333 STORED set?key4?0?0?4 4444 STORED set?key5?0?0?5 55555 STORED quit Connection?closed?by?foreign?host.

?

登錄到51上的memcached,獲取到了key2和key4:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@mongo01?~]#?telnet?192.168.11.51?11211 Trying?192.168.11.51... Connected?to?192.168.11.51. Escape?character?is?'^]'. get?key1 END get?key2 VALUE?key2?0?2 22 END get?key3 END get?key4 VALUE?key4?0?4 4444 END get?key5 END quit Connection?closed?by?foreign?host.

?

登錄到52上的memcached,獲取到了key1、key3和key5:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@mongo02?~]#?telnet?192.168.11.52?11211 Trying?192.168.11.52... Connected?to?192.168.11.52. Escape?character?is?'^]'. get?key1 VALUE?key1?0?1 1 END get?key2 END get?key3 VALUE?key3?0?3 333 END get?key4 END get?key5 VALUE?key5?0?5 55555 END quit Connection?closed?by?foreign?host.

?

登錄到68上的memcached,獲取到了key1到key5:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@szlnmp01?~]#?telnet?192.168.11.68?11211 Trying?192.168.11.68... Connected?to?192.168.11.68. Escape?character?is?'^]'. get?key1 VALUE?key1?0?1 1 END get?key2 VALUE?key2?0?2 22 END get?key3 VALUE?key3?0?3 333 END get?key4 VALUE?key4?0?4 4444 END get?key5 VALUE?key5?0?5 55555 END quit Connection?closed?by?foreign?host.

?

停掉52的memcached進程,通過51上的magent獲取到了key1到key5:

1 kill?`cat?/var/run/memcached/memcached.pid`
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@mongo01?magent]#?telnet?192.168.11.51?11200 Trying?192.168.11.51... Connected?to?192.168.11.51. Escape?character?is?'^]'. get?key1 VALUE?key1?0?1 1 END get?key2 VALUE?key2?0?2 22 END get?key3 VALUE?key3?0?3 333 END get?key4 VALUE?key4?0?4 4444 END get?key5 VALUE?key5?0?5 55555 END quit Connection?closed?by?foreign?host.

?

恢復52的memcached進程,通過51上的magent,只獲取到了key2和key4:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@mongo01?~]#?telnet?192.168.11.51?11200 Trying?192.168.11.51... Connected?to?192.168.11.51. Escape?character?is?'^]'. get?key1 END get?key2 VALUE?key2?0?2 22 END get?key3 END get?key4 VALUE?key4?0?4 4444 END get?key5 END quit Connection?closed?by?foreign?host.

?

通過以上測試可以得出結論:

1. 通過magent的連接池存放的值會分別存在magent代理的所有memcached上去。

2. 如果有一個memcached宕機通過magent代理方式還能取到值。

3. 如果memcached修復重啟后通過magent代理方式取到的值就會為Null,這是由于memcache重啟后里邊的值隨著memcache服務的停止就消失了(因為在內存中),但是magent是通過key進行哈希計算分配到某臺機器上的,memcache重啟后會還從這臺機器上取值,所有取到的值就為空。

?

解決辦法:

1. 在每次memcache宕機修復后可以寫一個程序把集群中的其他memcache的所有信息全給拷貝到當前宕機修復后的memcache中。

2. 自己寫代理,當從一個memcached服務上取到的值為Null時再去其他memcached上取值。

?

注意事項:

magent的調用方式同memcached一樣,客戶端可以不用改代碼即可實現切換到magent模式下。

?

緩存與DB的同步

?

比較保險的做法是:查詢的時候從緩存中取,add、updae、delete的時候同時操作緩存與DB。

當然你也可以定時同步緩存與DB的數據,不同的業務應該有不同的選擇。

?

magent-0.6版本相關的錯誤匯總

?

產生如下錯誤: ??

1 2 3 4 5 6 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

? ?

解決方法: ? ?
在ketama.h文件開頭添加 ? ?

1 2 3 #ifndef?SSIZE_MAX???? #define?SSIZE_MAX?32767???? #endif

?

再次make ? ?

?

產生如下錯誤: ? ?

1 2 3 4 5 6 7 gcc?-Wall?-g?-O2?-I/usr/local/include?-m64?-c?-o?magent.o?magent.c???? gcc?-Wall?-g?-O2?-I/usr/local/include?-m64?-c?-o?ketama.o?ketama.c???? gcc?-Wall?-g?-O2?-I/usr/local/include?-m64?-o?magent?magent.o?ketama.o????? usr/lib64/libevent.a?/usr/lib64/libm.a????? gcc:?/usr/lib64/libevent.a:?No?such?file?or?directory???? gcc:?/usr/lib64/libm.a:?No?such?file?or?directory???? make:?***?[magent]?Error?1

?

解決方法: ? ?

1 2 ln?-s?/usr/lib64/libm.so?/usr/lib64/libm.a???? vi?Makefile


找到LIBS = /usr/lib64/libevent.a /usr/lib64/libm.a ? ?
按照如下格式修改: ? ?
LIBS = /usr/<libevent的安裝路徑>/libevent.a /usr/lib64/libm.a ? ?
如:LIBS = /usr/lib/libevent.a /usr/lib64/libm.a ? ?
保存 ? ?

?

再次make ? ?

?

產生如下錯誤: ? ?

1 2 3 4 5 6 7 gcc?-Wall?-g?-O2?-I/usr/local/include?-m64?-o?magent?magent.o?ketama.o?/usr/lib/libevent.a?/usr/lib64/libm.a????? /usr/lib/libevent.a(event.o):?In?function?`gettime':???? /tmp/libevent-2.0.22-stable/event.c:370:?undefined?reference?to?`clock_gettime'???? /usr/lib/libevent.a(event.o):?In?function?`detect_monotonic':???? /tmp/libevent-2.0.22-stable/event.c:340:?undefined?reference?to?`clock_gettime'???? collect2:?ld?returned?1?exit?status???? make:?***?[magent]?Error?1

?

解決方法: ? ?

1 vi?Makefile

將 ? ?

1 CFLAGS?=?-Wall?-g?-O2?-I/usr/local/include?$(M64)

修改為: ? ?

1 CFLAGS?=?-lrt?-Wall?-g?-O2?-I/usr/local/include?$(M64)

保存 ? ?

?

再次make ? ?

?

輸出為: ? ?

1 gcc?-lrt?-Wall?-g?-O2?-I/usr/local/include?-m64?-o?magent?magent.o?ketama.o?/usr/lib/libevent.a?/usr/lib64/libm.a ?

轉載于:https://www.cnblogs.com/soundcode/p/7196335.html

總結

以上是生活随笔為你收集整理的Magent搭建Memcached集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。