咱們使用PHP鏈接多臺memcached服務器,作分佈式緩存,實現以下:php
$memcache = new Memcache; $memcache->addServer('192.168.252.134', 11211); $memcache->addServer('192.168.252.134', 11212); $memcache->addServer('192.168.252.134', 11213); for ($i = 0; $i < 1000; $i++) { $memcache->set($i, $i, 0, 1000); }
這樣的實現是最直接、簡單的,PHP應用直接鏈接memcached服務器。但也存在一個問題,就是可用性的問題,若是,有一臺memcached 服務器宕機了,那麼該服務器上的數據就丟失了,可能有人會認爲,memcached原本就是作緩存的,緩存丟失就丟了唄,沒什麼大驚小怪的。其實否則滴, 緩存的命中率也是影響系統穩定性和高可用的一個指標嘛,難道每次丟了緩存,咱們就那麼心寬的「去數據庫找數據就好咯」,這樣緩存還有意義嗎。html
針對上面的問題,能夠使用magent緩存代理服務器來管理memcached服務器,PHP應用由直接和多臺memcached交互轉變成和magent交互。那麼,magent都幫咱們作了什麼呢?數據庫
咱們先上個圖看看緩存
能夠看出,magent做爲memcached集羣的代理,還能夠作備份(192.168.252.134:11213爲備份服務器),主緩存服務 器(192.168.252.134:112十一、192.168.252.134:11212)宕機後,應用依舊能夠用從備份服務器上讀取到緩存。服務器
magent依賴libevent庫分佈式
magent依賴libevent庫memcached
magent依賴libevent庫post
重要的話說三遍!!測試
1)編譯安裝magentgoogle
cd /home mkdir ./magent cd ./magent wget -c https://memagent.googlecode.com/files/magent-0.5.tar.gz // 谷歌被牆了,若有須要能夠評論留郵箱 tar xzvf ./magent-0.5.tar.gz /sbin/ldconfig sed -i "s#LIBS = -levent#LIBS = -levent -lm#g" Makefile make cp ./magent /usr/bin/magent
2)memcached的搭建略過
3)啓動memcached和magent
magent -u root -l 192.168.252.134 -p 11210 -s 192.168.252.134:11211 -s 192.168.252.134:11212 -b 192.168.252.134:11213
4)運行測試腳本
<?php $host = '192.168.252.134'; $port = '11210'; $mem = memcache_connect($host, $port); $key1 = 'mctest1'; $value1 = '1'; $mem->add($key1, $value1); $key2 = 'mctest2'; $value2 = '2'; $mem->add($key2, $value2); $key3 = 'mctest3'; $value3 = '3'; $mem->add($key3, $value3); $key4 = 'mctest4'; $value4 = '4'; $mem->add($key4, $value4); $key5 = 'mctest5'; $value5 = '5'; $mem->add($key5, $value5); $key6 = 'mctest6'; $value6 = '6'; $mem->add($key6, $value6);
服務器192.168.252.134:11211
服務器192.168.252.134:11212
服務器192.168.252.134:11213
主服務器上的數據都會備份到備份服務器上,若是主服務器宕機了,應用依舊能夠從備份服務器上取數據。
更多的部署圖
本文連接:http://www.hcoding.com/?p=316
原創文章,轉載請註明:JC&hcoding.com