memcached 和它的代理

1.編譯libevent  
./configure --prefix=xxx  
make && make install  


2.編譯memcached  
./configure --prefix=xxx  
make && make install  


3.啓動memcached  
服務器端的命令爲:  
# /usr/local/bin/memcached -d -m 10 -u root -l 192.168.0.200 -p 12000 -c 256 -P /tmp/memcached.pid  



-d選項是啓動一個守護進程,  
-m是分配給Memcache使用的內存數量,單位是MB,我這裏是10MB,  
-u是運行Memcache的用戶,我這裏是root,  
-l是監聽的服務器IP地址,若是有多個地址的話,我這裏指定了服務器的IP地址192.168.0.200,  
-p是設置Memcache監聽的端口,我這裏設置了12000,最好是1024以上的端口,  
-c選項是最大運行的併發鏈接數,默認是1024,我這裏設置了256,按照你服務器的負載量來設定,  
-P是設置保存Memcache的pid文件,我這裏是保存在 /tmp/memcached.pid,  


想開機自動啓動的話,只需在/etc/rc.d/rc.local中加入一行,上面命令  
有人用如下命令:  
/usr/local/memcached/bin/memcached -d -m 20 -p 11211 -u apache  
上面有些東西能夠參考一下:即,ip不指定時,默認是本機,用戶,最好選擇是:apache 或 deamon  
這樣,也就是屬於哪一個用戶的服務,由哪一個用戶啓動。  


4.memcached退出 
kill `cat /tmp/memcached.pid` 


5.安裝libmemcached 
./configure --prefix=/xxxx/libmemcached --with-memcached=/xxxx/memcached/bin/memcached
make && make install 


--with-memcached 選項要指定到memcached可執行文件 
gcc是4.1,所以只能用老版本libmemcached(選了libmemcached-0.50) 


6.使用 
pythom-memcached下載連接不可用 ( http://www.tummy.com/software/python-memcached/) 
改用 
pylibmc (  https://pypi.python.org/pypi/pylibmc#downloads) 
  
7.安裝magent


ketama.* 是一致性hash的實現


0.5版本: 
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  
cp magent /usr/bin/magent  
cd ../ 



0.6版本: 
不須要額外操做,直接執行make便可


-------------
光用不理解說不過去,加點料(  http://code.google.com/p/memagent/wiki/HowMagentWorks ):
-------------
部署結構:
client---magent---{普通memcached集羣, 備份memcached集羣}


工做方式:
1.get操做,先到普通mem上讀取;若是失敗,再到備份mem上讀取(即服務器失效會致使兩次讀,不過只是特殊狀況下的處理,能夠接受)
2.若是一次get多個key的值,會逐個執行1.中的步驟
3.delete,incr,decr,add,set,replace,prepend,append,cas,同時操做{普通mem,備份mem}

     * 寫操做:先操做備份men,再操做普通mem
     * 不關聯二者之間操做的成功/失敗

4.client從magent上斷開,不影響magent保持與集羣server的連接
5.建議:client和magent部署在一塊兒,client經過127.0.0.1訪問magent時,效率會更高
-------------


8.配置轉發 
在memcached的bin/目錄 
./memcached -m 1 -u root -d -l 127.0.0.1 -p 11211 
./memcached -m 1 -u root -d -l 127.0.0.1 -p 11212  
./memcached -m 1 -u root -d -l 127.0.0.1 -p 11213  
magent -u root -n 51200 -l 127.0.0.1 -p 12000  -s 127.0.0.1:11211  -s 127.0.0.1:11212  -b 127.0.0.1:11213 


- 分別在112十一、112十二、11213端口啓動3個Memcached進程,在12000端口開啓magent代理程序;  
- 112十一、11212端口爲主Memcached,11213端口爲備份Memcached;  
- 鏈接上12000的magent,set key1和set key2,根據哈希算法,key1被寫入11212和11213端口的Memcached,key2被寫入11211和11213端口的Memcached;  
- 當112十一、11212端口的Memcached死掉,鏈接到12000端口的magent取數據,數據會從11213端口的Memcached取出;  
- 當112十一、11212端口的Memcached重啓復活,鏈接到12000端口,magent會從11211或11212端口的Memcached取數據,因爲這兩臺Memcached重啓後無數據,所以magent取得的將是空值,儘管11213端口的Memcached還有數據(此問題尚待改進)。 


9.測試流程 
參照  http://blog.s135.com/post/393/  其中使用的是magent-0.5 


我嘗試了0.5和最新的0.6,但裏面提到的重啓後的」 因爲這兩臺Memcached重啓後無數據,所以magent取得的將是空值,儘管11213端口的Memcached還有數據(此問題尚待改進)「,仍然存在 



10.題外話,緩存集羣的造成歷程 
緩存集羣不是天生就有的,只有應用場景的發展纔會引起對集羣的須要。 

STEP1:無緩存--->STEP2:單機memcached--->STEP3:memcached集羣+請求端分片--->STEP4:memcached集羣+單臺代理--->STEP5:memcached集羣+代理集羣--->再之後,就沒有之後了 

1~3階段都是很輕鬆的(不少業務能到3階段已是規模不小,值得慶幸了); 
4階段後期就會遇到各類壓力,要考慮memcached單臺失效對後端(極可能是DB或其餘持久化存儲)突發壓力的影響;magent的備份服務器是方法之一,但具體的備份方案須要琢磨,簡單的2倍存儲代價不小; 
5階段要考慮集羣+集羣的失效,須要引入DNS/名字服務等更低層的網絡措施;  python

相關文章
相關標籤/搜索