一.背景
Memcached在實(shí)現(xiàn)分布集群部署時(shí), Memcached服務(wù)端的之間是沒(méi)有通訊的,服務(wù)端是偽分布式,實(shí)現(xiàn)分布式是由客戶端實(shí)現(xiàn)的,客戶端實(shí)現(xiàn)了分布式算法把數(shù)據(jù)保存到不同的Memcached服務(wù)端。我們?cè)谏弦黄薪榻B了,當(dāng)我們客戶端進(jìn)行保存也key為keyValue,Value為dataValue時(shí),Memcached服務(wù)端我們做了一個(gè)測(cè)試驗(yàn)證一下,如圖所示:
二.問(wèn)題分析
memcached對(duì)容錯(cuò)不做處理的,也就是說(shuō)當(dāng) Memcached服務(wù)端掛掉或者Memcached重啟復(fù)活,由于Memcached重啟后無(wú)數(shù)據(jù),對(duì)高并發(fā)的大型系統(tǒng)中,是沒(méi)辦法接受的,我們?cè)诩旱那闆r下,要做到負(fù)載均衡和容錯(cuò),這種情況下,服務(wù)器端掛掉,負(fù)載就不那么均衡,緩存數(shù)據(jù)也會(huì)丟失,重新對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,加大的系統(tǒng)的性能,數(shù)據(jù)丟失容錯(cuò)也沒(méi)做得那么好。
三.解決
Magent是一款開(kāi)源的Memcached代理服務(wù)器軟件,使用它可以搭建高可用性的集群應(yīng)用的Memcached服務(wù),備份Memcached數(shù)據(jù),盡管Memcached服務(wù)掛掉,前端也能獲取到數(shù)據(jù),客戶端先連到Magent代理服務(wù)器,然后Magent代理服務(wù)器在可以連接多臺(tái)Memcached服務(wù)器,然后可以進(jìn)行數(shù)據(jù)的保存和備份數(shù)據(jù)。這樣數(shù)據(jù)就不會(huì)丟失,保存了數(shù)據(jù)完整性。
四.實(shí)現(xiàn)
第一步: 下載并安裝Magent并安裝
(1)下載地址http://memagent.googlecode.com/files/magent-0.5.tar.gz
(2)先安裝好Memcached服務(wù),這個(gè)在上一節(jié)已經(jīng)安裝好了
(3)Linux上安裝Magent
#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
在執(zhí)行make出現(xiàn)的問(wèn)題,Magen安裝出現(xiàn)的問(wèn)題我們?cè)谟薪榻B怎么解決
(4)驗(yàn)證一下,有沒(méi)有安裝正確
#magent 能正常顯示幫助信息,就說(shuō)明安裝正確,如圖所示:
第二步:設(shè)置Magent代理的Memcached的服務(wù)和備份的Memcached的服務(wù)
(1)啟動(dòng)三個(gè)Memcached進(jìn)程,分別為:
/opt/bin/memcached -d -m 5 -u root -l 192.168.74.129 -p 12000 -c 256 -P /tmp/memcached.pid
/opt/bin/memcached -d -m 5 -u root -l 192.168.74.130 -p 13000 -c 256 -P /tmp/memcached.pid
/opt/bin/memcached -d -m 5 -u root -l 192.168.74.130 -p 14000 -c 256 -P /tmp2/memcached.pid
(2)啟動(dòng)一個(gè)magent進(jìn)程:
magent -u root -n 51200 -l 192.168.74.129 -p 11000 -s 192.168.74.130:13000 -s 192.168.74.130:14000 -b 192.168.74.129:12000
-s 為要寫(xiě)入的memcached, -b 為備份用的memcached, -n number, set max connections, default is 4096
第三步:測(cè)試Magent
通過(guò)客戶端連接到緩存代理服務(wù)器,緩存代理服務(wù)器連接緩存服務(wù)器,緩存代理服務(wù)器可以連接多臺(tái)Memcached服務(wù)器可以將每臺(tái)Memcached服務(wù)器進(jìn)行數(shù)據(jù)同步,我們測(cè)試一下Memcached其中一臺(tái)掛掉,客戶端相同的key還能從緩存服務(wù)獲取數(shù)據(jù),還有測(cè)試一下數(shù)據(jù)保存到代理服務(wù)器,對(duì)應(yīng)的Memcached服務(wù)器也有數(shù)據(jù)。
(1)我們客戶端連接到代理服務(wù)器,然后保存數(shù)據(jù),Memcached服務(wù)器有保存到對(duì)應(yīng)的數(shù)據(jù)。
第一步:我們連接的我們代理服務(wù)器192.168.74.129:11000,然后保存數(shù)據(jù),這里我們直接在Linux服務(wù)上模擬,如圖所示:
我們?cè)O(shè)置key 為keyValue3 value為dataValue3
第二步:我們查看寫(xiě)入memcached服務(wù)有沒(méi)有對(duì)應(yīng)的添加
我們查看是保存在192.168.74.130:13000或者192.168.74.130:14000,如圖所示:
這時(shí)寫(xiě)入的Memcached服務(wù)是在192.168.74.130:13000服務(wù)上。
第三步:這時(shí)備份Memcached服務(wù)器上應(yīng)該有對(duì)應(yīng)的數(shù)據(jù),如圖所示:
我們剛才以192.168.74.129:12000為備份的Memcached服務(wù),這時(shí)有保存對(duì)應(yīng)的數(shù)據(jù),當(dāng)寫(xiě)入的emcached服務(wù)器掛掉可以從這里恢復(fù)數(shù)據(jù)。
(2)我們客戶端連接到代理服務(wù)器,然后對(duì)原來(lái)的key對(duì)應(yīng)的值進(jìn)行修改時(shí),Memcached服務(wù)器有對(duì)應(yīng)的數(shù)據(jù)應(yīng)該也是對(duì)應(yīng)的修改
第一步:replace修改,如圖所示:
第二步:我們查看一下代理服務(wù)器有沒(méi)有對(duì)應(yīng)的修改
我們客戶端連接到代理服務(wù)器,如圖所示:
我們?cè)瓉?lái)key 為keyValue3 value變?yōu)闉?/span>dataValueNew3
第三步:我們查看寫(xiě)入memcached服務(wù)有沒(méi)有對(duì)應(yīng)的修改
如圖所示:
這時(shí)之前寫(xiě)入的memcached服務(wù)是在192.168.74.130:13000服務(wù)上key 為keyValue3 value變?yōu)闉?/span>dataValueNew3
第三步:這時(shí)備份Memcached服務(wù)器上應(yīng)該有對(duì)應(yīng)的數(shù)據(jù)的修改,如圖所示:
(3)這時(shí)我們把對(duì)應(yīng)的寫(xiě)人的Memcached服務(wù)掛掉時(shí),數(shù)據(jù)會(huì)不會(huì)通過(guò)原來(lái)的key獲取對(duì)應(yīng)的值
我們之前查看keyValue3的值放在192.168.74.130:13000服務(wù)端,我們關(guān)掉服務(wù),這樣假設(shè)已經(jīng)掛掉服務(wù),驗(yàn)證一下,能不能獲取數(shù)據(jù),就是處理容錯(cuò)。
如圖所示:
這時(shí)我們關(guān)掉了192.168.74.130:13000服務(wù)端的進(jìn)程
在代理服務(wù)192.168.74.129:11000 get keyValue3還能獲取數(shù)據(jù)
(4)重啟一下memcached服務(wù)是在192.168.74.130:13000服務(wù),驗(yàn)證一下還能不能獲取數(shù)據(jù)?
我們之前查看keyValue3的值放在192.168.74.130:13000服務(wù)端,我們已經(jīng)關(guān)掉服務(wù),我們重啟一下192.168.74.130:13000服務(wù),在192.168.74.129:11000 代理服務(wù)能不能獲取數(shù)據(jù),我們先重啟一下192.168.74.130:13000服務(wù)器,如圖所示:
第一步:先查看192.168.74.130:13000的keyValue3
如圖所示:
這時(shí) 192.168.74.130:13000已經(jīng)沒(méi)有保存keyValue3對(duì)應(yīng)的值。因?yàn)镸emcached這邊不做持久化數(shù)據(jù)
第二步:備份先查看192.168.74.129:12000的keyValue3
如圖所示:
這時(shí)備份里還有存keyValue3對(duì)應(yīng)的值,所以可以從備份Memcached服務(wù)恢復(fù)數(shù)據(jù),起到了容錯(cuò)的作用
我們通過(guò)192.168.74.129:11000 代理服務(wù)上獲取keyValue3對(duì)應(yīng)的值
如圖所示:
這時(shí)192.168.74.130:13000服務(wù)重啟,通過(guò)192.168.74.129:11000 代理服務(wù)獲取不到keyValue3對(duì)應(yīng)的值。
聯(lián)系客服