Redis哨兵、複製、叢集的設計原理與區別
前面談了Redis高併發快的3個原因,本篇主要談Redis的高可用,兩篇合起來就可以把redis的高併發和高可用搞清楚了。
談到Redis伺服器的高可用,如何保證備份的機器是原始伺服器的完整備份呢?這時候就需要哨兵和複製。
哨兵(Sentinel):可以管理多個Redis伺服器,它提供了監控,提醒以及自動的故障轉移的功能。
複製(Replication):則是負責讓一個Redis伺服器可以配備多個備份的伺服器。
Redis正是利用這兩個功能來保證Redis的高可用。

哨兵(sentinal)
哨兵是Redis叢集架構中非常重要的一個元件,哨兵的出現主要是解決了主從複製出現故障時需要人為干預的問題。
1.Redis哨兵主要功能
-
叢集監控:負責監控Redis master和slave程序是否正常工作
-
訊息通知:如果某個Redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員
-
故障轉移:如果master node掛掉了,會自動轉移到slave node上
-
配置中心:如果故障轉移發生了,通知client客戶端新的master地址
2.Redis哨兵的高可用
原理:當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性。

- 哨兵機制建立了多個哨兵節點(程序),共同監控資料節點的執行狀況。
- 同時哨兵節點之間也互相通訊,交換對主從節點的監控狀況。
- 每隔1秒每個哨兵會向整個叢集:Master主伺服器+Slave從伺服器+其他Sentinel(哨兵)程序,傳送一次ping命令做一次心跳檢測。
這個就是哨兵用來判斷節點是否正常的重要依據,涉及兩個新的概念: 主觀下線和客觀下線。
-
主觀下線:一個哨兵節點判定主節點down掉是主觀下線。
-
客觀下線:只有半數哨兵節點都主觀判定主節點down掉,此時多個哨兵節點交換主觀判定結果,才會判定主節點客觀下線。
-
原理:基本上哪個哨兵節點最先判斷出這個主節點客觀下線,就會在各個哨兵節點中發起投票機制Raft演算法(選舉演算法),最終被投為領導者的哨兵節點完成主從自動化切換的過程。
Redis 複製(Replication)
Redis為了解決單點資料庫問題,會把資料複製多個副本部署到其他節點上,通過複製,實現Redis的高可用性,實現對資料的冗餘備份,保證資料和服務的高度可靠性。
1.資料複製原理(執行步驟)

- 從資料庫向主資料庫傳送sync(資料同步)命令。
- 主資料庫接收同步命令後,會儲存快照,建立一個RDB檔案。
- 當主資料庫執行完保持快照後,會向從資料庫傳送RDB檔案,而從資料庫會接收並載入該檔案。
- 主資料庫將緩衝區的所有寫命令發給從伺服器執行。
- 以上處理完之後,之後主資料庫每執行一個寫命令,都會將被執行的寫命令傳送給從資料庫。
注意:在Redis2.8之後,主從斷開重連後會根據斷開之前最新的命令偏移量進行增量複製。

Redis 主從複製、哨兵和叢集這三個有什麼區別

主從複製是為了資料備份,哨兵是為了高可用,Redis主伺服器掛了哨兵可以切換,叢集則是因為單例項能力有限,搞多個分散壓力,簡短總結如下:
主從模式:備份資料、負載均衡,一個Master可以有多個Slaves。
sentinel發現master掛了後,就會從slave中重新選舉一個master。
cluster是為了解決單機Redis容量有限的問題,將資料按一定的規則分配到多臺機器。
sentinel著眼於高可用,Cluster提高併發量。
1.主從模式:讀寫分離,備份,一個Master可以有多個Slaves。
2.哨兵sentinel:監控,自動轉移,哨兵發現主伺服器掛了後,就會從slave中重新選舉一個主伺服器。
3.叢集:為了解決單機Redis容量有限的問題,將資料按一定的規則分配到多臺機器,記憶體/QPS不受限於單機,可受益於分散式叢集高擴充套件性。