哨兵模式的定義:
是Redis的一種高可用解決方案,通過運行多個Redis實例來監控主從Redis實例的狀態,當主實例出現故障時,哨兵會自動選舉一個從實例作為新的主實例,從而保證系統的高可用性。哨兵模式可以監控多個主從Redis實例,并在主實例故障時自動進行故障轉移,同時還可以對故障進行報警和通知。這種模式可以有效地提高Redis系統的可用性和穩定性。
主從復制中的缺點:
主從復制中主節點宕機了,還需要手工把另一臺從節點提升為主節點,這樣就不能實現真正的高可用。
上篇文章實現了一主兩從的Redis集群,實現了一定程度上的高可用,相比于一個單節點的Redis有了很大的提升。
上篇文章的鏈接:http://t.csdnimg.cn/51cOU
實現故障的自動轉移就是哨兵模式干的事。哨兵會以一個獨立的進程運行再Redis集群中。用來監控Redis中的各個節點是否運行正常。
哨兵主要用來執行以下幾個功能:
1.? 監控:通過不斷的發送命令來檢查Redis節點是否正常。
2.? 通知:如果發現某個節點出現了問題,那么哨兵就會通過發布訂閱模式來通知其他節點。
3.? 自動故障轉移: 當主節點不能正常工作的時候,哨兵會開始一個自動故障轉移的操作。他會將一個從節點升級為新的主節點,然后將其他從節點指向新的主節點?。
配置哨兵模式:
首先需要在Redis集群中添加一個哨兵節點,可以使用:
redis -sentinel
來啟動哨兵節點。然后創建一個sentinel.cof配置文件。
?
?在配置文件中添加一條語句。monitor后面的是主節點的名稱,可以自己定義,最后那個1代表只需要一個哨兵節點同意就可以進行故障轉移了。
接下來就可以啟動哨兵節點了:
redis-sentinel sentinel.conf
通過上述語句啟動一個哨兵節點。?
啟動完成之后就可以看到一個運行在26379端口的哨兵模式。
然后將6379端口的服務端終止(ctrl + c或者將終端×掉),來模擬主節點宕機的情況。?
然后就會發現現在新的主節點的端口為6381。
?再來查看6381這個端口的節點,發現他現在是主節點。
?
6380依然是從節點,他的主節點是6381。
最后有一點需要注意的是:
哨兵本身也是一個進程,自己也會有單節點故障的問題,所以在一般的生產環境會使用3個哨兵節點來保證高可用。這3個哨兵節點會通過選舉的方式來選出一個領導者,然后由領導者來監控其他節點,如果領導者掛了,那么其他哨兵節點會重新選舉出一個領導者。這樣就可以保證哨兵節點的高可用了。
Redis中多個哨兵節點的選舉是自動的。當主節點出現故障或不可達時,哨兵節點會自動進行選舉,選舉出新的主節點,并通知其他從節點切換到新的主節點上。這樣可以保證系統的高可用性和故障恢復能力。哨兵節點之間會相互通信,通過投票來決定新的主節點,并在選舉完成后自動更新配置,使得系統可以繼續正常工作。