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入口上,既能達到高可用,還能起到負載均衡。
如上圖所示:
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
利用github page搭建部落格
很多人用 wordpress,你為什麼要用 github pages 來搭建?1 github pages有300m免費空間,資料自己管理,儲存可靠 2 學著用 github,享受 github 的便利,上面有很多大牛,眼界會開闊很多 3 順便看看 github 工作原理,最好的團隊協作流程 4 g...
利用FFMPEG Nginx 搭建 HLS 伺服器
使用ffmpeg 生成m3u8檔案和碼流片段 2.編譯安裝 configure make make install 3.ts 分割 ffmpeg i input.ts map 0 0 map 0 1 c copy f segment segment time 10 segment list test...
利用Express搭建空白工程
1 官網 中文站點 安裝完成後檢視nodejs版本號和npm版本號 node v npm v 如果能顯示對應的版本號說明node安裝成功 2 全域性安裝express 生成器,命令如下 npm install g express generator npm 是node內建的包管理器。可以放心使用。e...