Magent 是一款開源的 Memcached 代理服務器軟件,使用它可以搭建高可用性的集群應用的 Memcached 服務 ,備份 Memcached 數(shù)據(jù),盡管 Memcached 服務掛掉过咬,前端也能獲取到數(shù)據(jù),客戶端先連到 Magent 代理服務器 制妄,然后Magent 代理服務器 在可以連接多臺 Memcached 服務器掸绞,然后可以進行數(shù)據(jù)的保存和備份數(shù)據(jù)。這樣數(shù)據(jù)就不會丟失耕捞,保存了數(shù)據(jù)完整性衔掸。
安裝Magent
1)下載安裝
cd /usr/local
mkdir magent
wget http://memagent.googlecode.com/files/magent-0.6.tar.gz
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參數(shù)說明:
-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 最大并發(fā)數(shù)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
- 分別在11211磷斧、11212振愿、11213端口啟動3個Memcached進程,在12000端口開啟magent代理程序弛饭;
- 11211冕末、11212端口為主Memcached,11213端口為備份Memcached侣颂;
- 連接上12000的magent档桃,根據(jù)哈希算法,值被寫入11211或11212Memcached和備份11213端口的Memcached憔晒;
- 當11211藻肄、11212端口的Memcached死掉蔑舞,連接到12000端口的magent取數(shù)據(jù),數(shù)據(jù)會從11213端口的Memcached取出嘹屯;
- 當11211攻询、11212端口的Memcached重啟復活,連接到12000端口抚垄,magent會從11211或11212端口的Memcached取數(shù)據(jù)蜕窿,由于這兩臺Memcached重啟后無數(shù)據(jù),因此magent取得的將是空值呆馁,盡管11213端口的Memcached還有數(shù)據(jù)桐经。
緩存與DB的同步
比較保險的做法是:查詢的時候從緩存中取,add浙滤、updae阴挣、delete的時候同時操作緩存與DB。
當然你也可以定時同步緩存與DB的數(shù)據(jù)纺腊,不同的業(yè)務應該有不同的選擇畔咧。