教你用Magent實現Memcached叢集

大雄45發表於2020-05-08
Magent 是一款開源的 Memcached 代理伺服器軟體,使用它可以搭建高可用性的叢集應用的 Memcached 服務 ,備份 Memcached 資料

儘管 Memcached 服務掛掉,前端也能獲取到資料,客戶端先連到 Magent 代理伺服器 ,然後Magent 代理伺服器 在可以連線多臺 Memcached 伺服器,然後可以進行資料的儲存和備份資料。這樣資料就不會丟失,儲存了資料完整性。

安裝Magent

1)下載安裝

cd /usr/local
mkdir magent
wget 
tar -zxvf magent-0.6.tar.gz
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile

在ketama.h或magent.c開頭新增

#ifndef SSIZE_MAX
#define SSIZE_MAX 32767
#endif
make

複製 make 生成的/usr/local/下名為magent的檔案到/usr/bin/

cp magent /usr/bin/magent

檢查是否安裝成功:

./magent -h

代理Memcache

magent -u root -n 51200 -l 192.168.1.90 -p 12000 -s 192.168.1.111:11211 -s 192.168.1.112:11212 -b 192.168.1.112:11211
magent引數說明:
-h 幫助說明
-u 使用者
-g gid
-p 啟動埠, 預設11211. (0 to disable tcp support)
-s 服務memcached地址,ip:port, set memcached server ip and port
-b 備份memcached地址,ip:port, set backup memcached server ip and port
-l 啟動IP地址,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

教你用Magent實現Memcached叢集教你用Magent實現Memcached叢集
如上一章,這次透過magent設值

  • 分別在11211、11212、11213埠啟動3個Memcached程式,在12000埠開啟magent代理程式;
  • 11211、11212埠為主Memcached,11213埠為備份Memcached;
  • 連線上12000的magent,根據雜湊演算法,值被寫入11211或11212Memcached和備份11213埠的Memcached;
  • 當11211、11212埠的Memcached死掉,連線到12000埠的magent取資料,資料會從11213埠的Memcached取出;
  • 當11211、11212埠的Memcached重啟復活,連線到12000埠,magent會從11211或11212埠的Memcached取資料,由於這兩臺Memcached重啟後無資料,因此magent取得的將是空值,儘管11213埠的Memcached還有資料。
快取與DB的同步

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

當然你也可以定時同步快取與DB的資料,不同的業務應該有不同的選擇。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2690744/,如需轉載,請註明出處,否則將追究法律責任。

相關文章