本篇文章版權歸博客園和作者吳雙本人共同所有,轉載和爬蟲請註明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,講到了redis主從複製,讀寫分離。然而留下的問題是當主伺服器掛了,我們就無法向客戶端提供任何服務了呀,這樣的方案,就不能稱之為高可 ...
本篇文章版權歸博客園和作者吳雙本人共同所有,轉載和爬蟲請註明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/
本人之前有篇文章,講到了redis主從複製,讀寫分離。然而留下的問題是當主伺服器掛了,我們就無法向客戶端提供任何服務了呀,這樣的方案,就不能稱之為高可用方案。下麵,提供一種Redis集群高可用方案,拙劣之處,歡迎指正和補充。
Redis為我們提供了哨兵,它就像一個為我們的Redis服務站崗的人,當主伺服器發生異常時,他會通過投票的方式,將從服務節點升為主服務節點。當我們處理好主節點故障並重啟時,原來掛掉的主節點,作為新的主節點的子節點。
為了在本機測試,首先我在6379,6380,6381節點上開啟三個redis服務,6379做為master節點,6380和6381作為其從服務節點。關於主從的配置如果有疑問的話請看我的這篇文章http://www.cnblogs.com/tdws/p/5705782.html。
下麵你需要再將redis文件夾機器內容複製出一份,我將其文件夾命名為Sentinel.
我們將其配置文件最後,增加如下配置信息。配置信息配置了哨兵埠5000,我們的redis客戶端,比如C#的stackservice,stackExechange,可以從哨兵中讀取當前集群情況,也就是說主掛後,我們客戶端都可以獲取到信息,並且從新的服務節點及埠中進行鍵值的操作。另外配置文件說到,主服務節點為6379,並且多個哨兵時,得到哨兵們的投票為1票時就認為主節點失聯,可切換從節點為主。
down-after-milliseconds 指明嘗試多少毫秒無反應,哨兵認為其失聯。
parallel-sync指明當故障發生時,允許有多少個從節點,同時從新的主節點同步數據。這個配置意義在於,你這個值設置的越小,所有從節點同步時間也就越久,比如如下配置,每次只能同步一個,從節點越多,自然也就越久。那麼這個值設置的大,或造成什麼影響,這取決於我們的配置文件,我們可以配置在從同步主節點時,以舊的數據提供給客戶端,在同步完成後,提供新數據,這樣不會造成從節點同步期間不可用的情況。而然而,在同步完成後,需要刪除舊的數據,載入新的數據,在這短暫的期間,還是會有從節點不可用的情況發生。
port 5000 sentinel monitor mymaster 127.0.0.1 6379 1 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1
下麵就到了我們啟動sentinel(哨兵)的時候了!
同樣切換到Sentinel文件夾目錄下,執行命令
這樣一來,哨兵"觀察站"啟動了。
首先我們展示下正常情況,主從的複製以及讀寫情況。
上圖主節點寫入新鍵。下圖在兩個從節點讀取數據。
接下來,我們看一下主節點掛掉之後,會發生什麼。我將主節點服務關閉。
我們之前的只讀從節點,現在已經升為可寫的主節點了!
當然,想要做到高可用,哨兵也應該多個節點,有關更多哨兵命令,配置及其原理,下回分解。