一、分布式部署設置:

memcached 雖然稱為 “ 分布式 ” 緩存服務器,但服務器端并沒有 “ 分布式 ” 功能。每個服務器都是完全獨立和隔離的服務。 memcached 的分布式,則是完全由客戶端程序庫實現的。 這種分布式是 memcached 的最大特點。所以部署時以相同的方式在不同服務器上安裝部署即可。

二、監控:


【資料圖】

一個簡單的命令行工具memcache-top

下載網址:
http://code.google.com/p/memcache-top/

下載之后放在/root/soft目錄下

運行命令:

perl memcache-top-v0.6 –instances=ip:端口號,ip:端口號

兩臺服務器:

perl/root/soft/memcache-top-v0.6–instances=192.168.175.100:11211,192.168.175.100:11211

運行效果如下:

daemontools: 監視memcached進程并自動啟動.

網址:
http://cr.yp.to/daemontools.html

通常情況下memcached運行得相當穩定,但也不排除因為一些不可預知的因素導致memcached進程死掉,而又不能及時的發現重啟。架構上保證了即使有幾臺memcached故障 也不會影響服務,不過對于memcached進程死掉的服務器,只要重新啟動memcached,就可以正常運行,所以采用了監視memcached進程并自動啟動的方法。于是使用了daemontools。

這里不介紹daemontools的安裝了。我使用了以下的run腳本來啟動memcached。

#!/bin/sh

exec 2>&1

exec /usr/local/bin/memcached -d -u root -m 1024 -p 11211 -c 2048 -P /tmp/memcached.pid

三、測試

服務端:

兩臺服務器,各啟動兩個進程,分配200M內存

啟動參數:

/usr/local/bin/memcached -d -m 200 -u root -p 11211

/usr/local/bin/memcached -d -m 200 -u root -p 11212

監控啟動:

perl/root/soft/memcache-top-v0.6–instances=192.168.175.100:11211,192.168.175.100:11212,192.168.175.101:11211,192.168.175.101:11212

基于spymemcached測試

1、 打開監控

2、 往memcached插入10000條數據

MemcachedClient c=new MemcachedClient(

AddrUtil.getAddresses(

“192.168.175.100:11211 192.168.175.100:11212

192.168.175.101:11211 192.168.175.101:11212″));

for(int i=0;i<10000;i++){

c.set(“key_”+i, 3600, “value_”+i);

}

插入數據之后監控畫面:

四個memcached服務都存在,讀取監控也同上圖。

取值代碼:

MemcachedClient c=new MemcachedClient(

AddrUtil.getAddresses(

“192.168.175.100:11211 192.168.175.100:11212

192.168.175.101:11211 192.168.175.101:11212″));

for(int i=0;i<10000;i++){

String key = “key_”+i;

Object obj = c.get(key);

System.out.println(key+”=”+obj);

}

3、 重啟服務101:11212,再讀取這10000個值,監控結果如下

說明某臺服務器的數據丟失之后不會影響其它服務器的數據和讀取。

4、 去掉某臺服務,再讀取這10000個值,監控結果如下

去掉服務101:11212,獲取監控如下:

增加一個新的服務,101:11213,獲取監控如下:

可見,節點的變化會影響命中率。

關鍵詞: