memcache集羣服務:memagent配置使用

magent是一款開源的memcached代理服務器軟件
地址:http://code.google.com/p/memagent/ 安裝magent到/usr/local/下
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
/sbin/ldconfig
sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile
make

magent命令參數:
-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, max keep alive connections for one memcached server, default is 20
-v verbose

啓動magent服務
magent -u root -n 4096 -l 127.0.0.1 -p 12000 -s 127.0.0.1:8086 -s 127.0.0.2:8086 -b 127.0.0.1:11213

magent的hash算法
magent採用的是:Consistent Hashing原理,Consistent Hashing如下所示:首先求出memcached服務器(節點)的哈希值, 並將其配置到0~232的圓(continuum)上。 然後用同樣的方法求出存儲數據的鍵的哈希值,並映射到圓上。 然後從數據映射到的位置開始順時針查找,將數據保存到找到的第一個服務器上。 如果超過232仍然找不到服務器,就會保存到第一臺memcached服務器上。

從上圖的狀態中添加一臺memcached服務器。餘數分佈式算法由於保存鍵的服務器會發生巨大變化 而影響緩存的命中率,但Consistent Hashing中,只有在continuum上增加服務器的地點逆時針方向的 第一臺服務器上的鍵會受到影響。


利用magent實現對memecache的分佈式管理,搭建一套memcache集羣服務
1、前端php對magent的訪問跟對memcache訪問相同,不需要做任何更改,對於插入的key,magent會把值散列到各個memcache服務上,只操作magent,不用關心後端處理
2、公司項目應用:南北各10臺前端,南北各部署一套magent服務,主要是考慮電信網通的跨網訪問
以北方爲例,每個前端安裝memcached服務(大內存機器可以啓動多個服務),每個前端都安裝magent服務,後端掛載全部機器的memcached服務,啓動參數:magent -p 12000 -s 127.0.0.1:8086 -s 127.0.0.2:8086 -s 127.0.0.3:8086.......-s 127.0.0.10:8086,所有前端配置都是相同的,任何一個前端只需訪問本地端口的magent,這樣的memcache集羣對應用帶來很大便利.
比如項目的基本配置信息,早期策略只能在中控機生成配置文件,同步到各個前端,沒有辦法把配置信息放到緩存中,因爲各個前端的memcache是不共享的,一臺機器緩存更新,其它機器是不更新的,用程序去控制更新,還是存在不穩定因素,而且隨着服務增多,也不便於管理,部署了magent後,就可以解決這個問題,任何一個前端更新數據=全局更新
這種部署還可以解決的應用:session共享

項目中多處已經實際應用,magent對memcache的均衡和穩定性都非常不錯,推薦使用
發佈了32 篇原創文章 · 獲贊 0 · 訪問量 8667
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章