1. 程式人生 > >windows環境下memcache配置方法 詳細篇

windows環境下memcache配置方法 詳細篇

將memcache伺服器安裝包解壓到C:\memcached資料夾後,使用cmd命令視窗安裝。

1>開始>執行:CMD(確定)

2>cd C:\memcached(回車)

3>memcached -d install(回車 這步執行安裝)

4>memcached -d start(回車 這步執行啟動memcache伺服器,預設分配64M記憶體,使用11211埠)

此時memcache伺服器已經可以正常使用了。


在服務端執行:
# ./memcached -d -m 2048 -l 10.0.0.40 -p 11211
這將會啟動一個佔用2G記憶體的程序,並開啟11211埠用於接收請求。由於32位系統只能處理4G記憶體的定址,所以在大於4G記憶體使用PAE的32位伺服器上可以執行2-3個程序,並在不同埠進行監聽。

又如:memcached -d -m 10 -u root -l 192.168.105.73 -p 12000 -c 256 -P /tmp/memcached.pid

-d選項是啟動一個守護程序,
-m是分配給Memcache使用的記憶體數量,單位是MB,我這裡是10MB,
-u是執行Memcache的使用者,我這裡是root,
-l是監聽的伺服器IP地址,如果有多個地址的話,我這裡指定了伺服器的IP地址192.168.105.73 ,
-p是設定Memcache監聽的埠,我這裡設定了12000,最好是1024以上的埠,
-c選項是最大執行的併發連線數,預設是1024,我這裡設定了256,按照你伺服器的負載量來設定,
-P是設定儲存Memcache的pid檔案,我這裡是儲存在 /tmp/memcached.pid

memcache伺服器安全:

Memcache伺服器端都是直接通過客戶端連線後直接操作,沒有任何的驗證過程,這樣如果伺服器是直接暴露在網際網路上的話是比較危險,輕則資料洩露被其他無關人員檢視,重則伺服器被入侵,況且裡面可能存在一些我們未知的bug或者是緩衝區溢位的情況,這些都是我們未知的,所以危險性是可以預見的。為了安全起見,做兩點建議,能夠稍微的防止黑客的入侵或者資料的洩露。

現在就關於修改memcache伺服器配置的問題說明如下:

1>用內網ip的方式提供web應用伺服器呼叫,不允許直接通過外網呼叫,如將memcache伺服器放在192.168.1.55的伺服器上

2>修改埠,如改為11200

3>分配記憶體,如分配1024M(1G記憶體)

方法如下:



1>開始>執行:CMD(確定)

2>cd C:\memcached(回車)

3>memcached -m 1024 -p 11200 -l 192.168.1.55(回車)

注意,此時命令列不會回到C:\memcached>狀態,並且實際上memcache伺服器悄悄變為stop狀態了。此視窗不可以關閉。新開一個cmd視窗

4>開始>執行:CMD(確定)

5>cd C:\memcached(回車)

6>memcached -d start(回車)可以關閉此cmd視窗。

此時可以使用新配置的memcache伺服器了。


上述方法雖然解決了修改預設配置的問題,但是始終會有一個cmd視窗不可以關閉,否則就回到11211埠的預設配置。

更好的解決方案是通過修改服務的登錄檔配置:

1>開始>執行:regedit(回車)

2>在登錄檔中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server

3>預設的ImagePath鍵的值是:"c:\memcached\memcached.exe" -d runservice,改為:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.55(確定,關閉登錄檔)

4>我的電腦(右鍵)>管理>服務 找到memcache的服務,重新啟動一次即可生效。


此時,同網段內的電腦仍然可以利用這臺memcache伺服器,我們限定指定的web應用伺服器才能夠使用,通過防火牆的方式。如只允許192.168.1.2這臺Web伺服器對Memcache伺服器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做。

Memcache伺服器端都是直接通過客戶端連線後直接操作,沒有任何的驗證過程,這樣如果伺服器是直接暴露在網際網路上的話是比較危險,輕則資料洩露被其他無關人員檢視,重則伺服器被入侵,因為Mecache是以root許可權執行的,況且裡面可能存在一些我們未知的bug或者是緩衝區溢位的情況,這些都是我們未知的,所以危險性是可以預見的。為了安全起見,我做兩點建議,能夠稍微的防止黑客的入侵或者資料的洩露。

內網訪問
最好把兩臺伺服器之間的訪問是內網形態的,一般是Web伺服器跟Memcache伺服器之間。普遍的伺服器都是有兩塊網絡卡,一塊指向網際網路,一塊指向內網,那麼就讓Web伺服器通過內網的網絡卡來訪問Memcache伺服器,我們Memcache的伺服器上啟動的時候就監聽內網的IP地址和埠,內網間的訪問能夠有效阻止其他非法的訪問。
# memcached -d -m 1024 -u root -l 192.168.0.200 -p 11211 -c 1024 -P /tmp/memcached.pid
Memcache伺服器端設定監聽通過內網的192.168.0.200的ip的11211埠,佔用1024MB記憶體,並且允許最大1024個併發連線

設定防火牆
防火牆是簡單有效的方式,如果卻是兩臺伺服器都是掛在網的,並且需要通過外網IP來訪問Memcache的話,那麼可以考慮使用防火牆或者代理程式來過濾非法訪問。
一般我們在Linux下可以使用iptables或者FreeBSD下的ipfw來指定一些規則防止一些非法的訪問,比如我們可以設定只允許我們的Web伺服器來訪問我們Memcache伺服器,同時阻止其他的訪問。
# iptables -F
# iptables -P INPUT DROP
# iptables -A INPUT -p tcp -s 192.168.0.2 –dport 11211 -j ACCEPT
# iptables -A INPUT -p udp -s 192.168.0.2 –dport 11211 -j ACCEPT
上面的iptables規則就是隻允許192.168.0.2這臺Web伺服器對Memcache伺服器的訪問,能夠有效的阻止一些非法訪問,相應的也可以增加一些其他的規則來加強安全性,這個可以根據自己的需要來做


很多時候需要監控伺服器上的Memcached執行情況,比如快取的查詢次數,命中率之類的。但找到的
那個memcached-tool是linux下用perl寫的,我也沒試過windows能不能用。後來發現個簡單的辦法可以做到,就是使用Telnet。

1、windows系統連線memcached埠 cmd命令列中鍵入telnet 192.168.1.1 11211 11211是memcached繫結的埠號。
2、連線上埠後輸入 stats命令,即可得到描述Memcached伺服器執行情況的引數。
STAT pid 4356 伺服器程序ID
STAT uptime 56625 伺服器執行時間,單位秒
STAT time 1225249079 伺服器當前的UNIX時間
STAT version 1.1.0 伺服器的版本號
STAT pointer_size 64
STAT rusage_user 151.845489 該程序累計的使用者時間(秒:微妙)
STAT rusage_system 121.667603 該程序累計的系統時間(秒:微妙)
STAT ibuffer_size 4096
STAT curr_connections 13 連線數量
STAT total_connections 54136 伺服器執行以來接受的連線總數
STAT connection_structures 318 伺服器分配的連線結構的數量
STAT cmd_get 100595 取回請求總數
STAT cmd_set 6510 儲存請求總數
STAT get_hits 96543 請求成功的總次數
STAT get_misses 4052 請求失敗的總次數
STAT bytes_read 4427679 伺服器從網路讀取到的總位元組數
STAT bytes_written 6585596 伺服器向網路傳送的總位元組數

1>、uptime 是memcached執行的秒數,
2>、cmd_get是查詢快取的次數。
3>、這兩個資料相除一下就能得到平均每秒請求快取的次數——最近niupu的流量很低,所以平均也就一秒請求一次多,
這麼點大的壓力,用檔案系統快取一樣沒問題,根本不會體現出使用memcached的優越。
4>、下面的cmd_set 就是設定key=>value的次數。整個memcached是個大hash,用cmd_get沒有找到的內
容,就會呼叫一下cmd_set寫進快取裡。
5>、緊跟著是get_hits,就是快取命中的次數。快取命中率 = get_hits/cmd_get * 100%。
6>、下面的get_misses的數字加上get_hits應該等於cmd_get。
7>、而total_itemscurr_items表示現在在快取中的鍵值對個數.
8>、在圖上total_items == cmd_set == get_misses,不過當可用最大記憶體用光時,memcached就會刪掉一些內容,上面的等式就不成立了