由於memcached
伺服器與伺服器之間沒有任何通訊,並且不進行任何資料複製備份,所以當任何伺服器節點出現故障時,會出現單點故障,如果需要實現高可用性,則需要通過另外的方式來解決,這就涉及到故障轉移技術。所謂的故障轉移,實在
memcached
多節點—集群—工作環境中,面對單點故障時(比如單個節點上的資料庫伺服器宕機),如何進行將損失降到最低,保證快取的正常工作?
目前比較常用的單點故障解決方案有2
種:本地備份快取和採用快取**伺服器。本地備份快取,是在本地放乙份快取,同時也在分布式
memcached
上放乙份快取,如果當其中一台節點宕機了,客戶端程式直接讀取本地的快取,本地客戶端維護乙個
hashmap
即可,這樣的方案雖然很簡陋,但是可以滿足一部分場景的需要,當很急需的時候可以作為臨時方案暫時替代一下。
採用快取**伺服器(比如magent
,可以做多主或多從)以及repcached
來進行故障失效轉移,這一節先介紹採用
magent
快取**防止單點現象。快取**也可以做備份,通過客戶端連線到快取**伺服器,快取**伺服器連線快取伺服器,快取**伺服器可以連線多台
memcached
機器可以將每台
memcached
機器進行資料同步。這樣的架構比較完善了,如果其中一台快取**伺服器
down
機,系統依然可以繼續工作,如果其中一台
memcached
機器down
掉,資料不會丟失並且可以保證資料的完整性。
另外幾台伺服器的資料,這樣依賴,該台備份伺服器上就始終儲存了乙份完整的資料。當發生意外情況的時候,直接讀取備份伺服器上的資料。等伺服器故障恢復後,再從客戶端,將資料合理的分發出去。
1 magent安裝
下面就magent
工具進行單點故障的失效轉移進行測試。
magent是一款開源的
memcached
[root@zengxiangtao~]# cd/home
[root@zengxiangtao home]# mkdir magent
[root@zengxiangtao home]# cd magent
[root@zengxiangtao home]# wget
2.magent解壓配置
4.magent安裝
[root@zengxiangtao magent]# make
在編譯的過程中會出現很多錯誤,magent
安裝過程中報如下的錯誤:
解決方法是在ketama.h
中新增如下紅框部分的內容:
再次執行安裝magent
出現錯誤「沒有那個檔案或目錄」:
再次執行安裝magent
出現錯誤「沒有那個檔案或目錄」:
解決方法:如果是64bit
的系統則不會在
/usr/lib64/libm.a
生成,如果是
32bit
即會有,所以,在
64位機器中,還必須:
[root@zengxiangtao magent]# ln-s/usr/lib64/libm.so/usr/lib64/libm.a
再次執行安裝
magent
:
[root@zengxiangtao magent]# make
又出現如下的「
collection2
:id
返回1...
」錯誤:
解決辦法是將makefile檔案中cflags = -wall -g -o2 -i/usr/local/include $(m64)
改為:cflags = -lrt -wall -g -o2 -i/usr/local/include $(m64)。
[root@zengxiangtao magent]# cp magent/usr/bin/magent
至此,magent
安裝完畢,附帶說明一下
magent
的優劣勢:
* 不足之處:當前magent
的執行速率只有
memcached
的80%
,需要改進;
* 優勢:增加後台的備份伺服器不會影響到magent
的效能,它的
cpu使用量低於
memcached
,並且只需要非常小的記憶體即可以執行。
magent支援
memcached
的命令有:
get、
gets
、delete
、incr
、decr
、add
、set
、replace
、prepend、、
cas,
magent
本身的命令引數如下:
新增故障轉移
當集群中只有乙個節點在執行時,意味著會有乙個單點故障問題 沒有冗餘。幸運的是,我們只需再啟動乙個節點即可防止資料丟失。啟動第二個節點 為了測試第二個節點啟動後的情況,你可以在同乙個目錄內,完全依照啟動第乙個節點的方式來啟動乙個新節點 參考安裝並執行 elasticsearch 多個節點可以共享同乙個...
Failover Cluster(故障轉移群集)
故障轉移群集中的可伸縮性通常是通過擴充套件群集內的單個伺服器,或向其中新增更多功能來實現的。了解以下兩點是很重要的 故障轉移群集必須設計為處理預期負載,各個伺服器的大小應當能夠適應 cpu 記憶體和磁碟使用的預期增長。failover cluster 伺服器通常是高階多處理器伺服器,並且它們被配置為...
Redis Cluster集群故障轉移
1.故障發現 1.1 主觀下線,redis集群通過gossip的ping,pong訊息來互相通訊,比如a節點向b節點傳送ping,如果在 cluster node timeout時間內一直失敗,則節點a會認為b是主觀下線,同時將此狀態資訊在集群內廣播 1.2 客觀下線,當半數以上的持有槽的主節點都標...