天天看點

利用magent搭建memcached叢集

memcached雖然能夠通過分布式緩存,實作其中memcached宕掉不會丢失全部緩存資料,但部分資料還是難逃一劫。

我們可以利用magent代理memcached實作主從備份來保證緩存資料完好無損,而且magent還可以作為從繼續使用,但大體工作原理如下:

1.magent每次寫資料都會寫到主memcached和從memcached上,并且向主從memcached寫的算法一樣;

2.當主memcached宕掉,magent會向從memcached中讀取資料;

3.當主memcached恢複後,magent将重新向主memcached中讀資料;此時由于主memcached剛恢複,其中并無資料,是以會導緻部分資料無法讀取,這也是magent的一大缺點。

針對magent的缺點有幾種想法:

1.在生産環境中主memcached宕掉的可能性非常小,大部分時間都是工作的;而從memcached隻是在主memcached宕掉後才使用,是以從memcached配置設定的空間不可能和主memcached一樣,這樣無疑是在浪費寶貴的記憶體空間。

2.既然從memcached配置設定空間較小,而随着存入的資料會越來越多,會導緻緩存的資料不斷被過期驅逐出記憶體,是以在主memcached宕掉後,隻能暫時起到緩解資料庫壓力的作用。

3.主memcached宕掉後,不宜直接将其啟動,還是在資料庫壓力比較小的時候再啟動吧,就當預熱緩存。

總結:我引入magent除了主從方面,還考慮到magent---magent實作memcached入口的負載均衡,也就是說讀寫請求按照一定的算法配置設定到兩個magent入口上,既能達到高可用,還能起到負載均衡。

利用magent搭建memcached叢集

如上圖所示:

1.magent1、magent2作為memcached的總入口,我們使用算法來實作負載均衡,配置設定讀寫請求,無論使用哪個入口配置設定到後端的memcached是一樣的,因為它們配置設定memcached使用的都是同一個算法consistent-hash

2.後端mecached1,mecached2,mecached3,mecached4多位4個主memcached

3.magent3作為從,同時也是從memcached的入口,其後端還有兩個memcached5,mecached6;由magent3,mecached5,mecached6共同組成從memcached

工作流程:

1.magent1,magent2接受寫請求,将key分别寫入mecached1-mecached4中,同時也将key寫入從memcached上,也就是magent3上,magent3再分别寫入mecached5,mecached6中;主和從都是用的同一個配置設定算法

2.magent1,magent2接受讀請求,将分别向主memcached中進行讀取,而不想從memcached中讀取;

3.一旦mecached1-mecached4中有一個memcached宕掉,此時magent1和magent2将向從memcached,也就是magent3中讀取資料,達到緩存資料不丢失的效果;

4.當主中的memcache恢複後,将再次加入主memcached中,此時magent1和magent2将不會向從memcached中讀資料了,但是寫仍正常進行;

啟動如下:

memcached1-memcached6

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11211 -m 1024 -c 102400

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11212 -m 1024 -c 102400

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11213 -m 1024 -c 102400

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11214 -m 1024 -c 102400

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11215 -m 1024 -c 102400

/usr/local/memcached-1.4.22/bin/memcached -u root -d -p 11216 -m 1024 -c 102400

magent3

/usr/bin/magent -u root -n 102400 -l 192.168.3.127 -p 12002 -s 192.168.3.127:11215 -s 192.168.3.127:11216

magent1:

usr/bin/magent -u root -n 102400 -l 192.168.3.127 -p 12000 -s 192.168.3.127:11211 -s 192.168.3.127:11212 -s 192.168.3.128:11213 -s 192.168.3.127:11214 -b 192.168.3.127:12002

magent2:

usr/bin/magent -u root -n 102400 -l 192.168.3.127 -p 12001 -s 192.168.3.127:11211 -s 192.168.3.127:11212 -s 192.168.3.128:11213 -s 192.168.3.127:11214 -b 192.168.3.127:12002