哨兵模式
它是一個高可用的解決方案,sentinel本身是一個獨立運行的進程,可以部署在其他與Redis叢集可通訊的機器中監控Redis叢集。
監控:哨兵會定時監控redis是否良好運作。 (建議學習:Redis影片教學)
提醒:如果哨兵發現某個redis節點出現狀況,能夠通知另一個行程(如他的客戶端)
自動故障遷移:在master宕機後會進行主備切換。當客戶端試圖連接失效的主伺服器時, 叢集也會向客戶端傳回新主伺服器的位址, 使得叢集可以使用新主伺服器取代失效伺服器。如果master恢復了,那麼就會變成slave。
Redis哨兵是分散式系統,採用Gossip協定接收master是否下線,採用投票協定決定是否執行故障遷移(在投票數超過所配置的值時會執行,執行時還需要得到一半以上的哨兵認可後才能執行),以及選擇哪個slave作為master。
主觀下線:當一個哨兵程序監控master無法連接了,那麼他認為master下線了。
客觀下線:當收到其他哨兵程序的master訊息,判斷是否真實下線。
每個哨兵向master、slave、其他哨兵每秒發送ping請求。
叢集模式
由於哨兵不支援平滑的擴容,增加節點,那麼自己要手動遷移資料。為此,Reids官方提供Redis Cluster實作分散式解決方案。分散式叢集首要解決把整個資料集依照分區規則對應到多個節點的問題,也就是把資料集分割到多個節點上,每個節點負責整個資料的子集。
我覺得跟一致性hash一樣。既然計算key的hash,取得到分片,那麼叢集模式缺陷就是無法進行key的批次運算了。因為這個key可能在不同的redis實例上。
叢集的故障發現也是透過Gossip來通知各個redis節點的,兩兩節點互相ping、pong。
刪除、增加節點則需要資料遷移。
更多Redis相關技術文章,請造訪Redis資料庫使用入門教學欄位學習!
以上是redis哨兵模式是叢集嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!