天天看點

一文詳解Redis哨兵、複制、叢集原理與差別

一文詳解Redis哨兵、複制、叢集原理與差別

大廠面試經常會問Redis主從複制、哨兵和叢集有什麼差別,本篇就來詳解@mikechen

哨兵(sentinal)

哨兵是Redis叢集架構中非常重要的一個元件,哨兵的出現主要是解決了主從複制出現故障時需要人為幹預的問題。

1.Redis哨兵主要功能

(1)叢集監控:負責監控Redis master和slave程序是否正常工作

(2)消息通知:如果某個Redis執行個體有故障,那麼哨兵負責發送消息作為報警通知給管理者

(3)故障轉移:如果master node挂掉了,會自動轉移到slave node上

(4)配置中心:如果故障轉移發生了,通知client用戶端新的master位址

2.Redis哨兵的高可用

原理:當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,并通知應用方,實作高可用性。

一文詳解Redis哨兵、複制、叢集原理與差別
  1. 哨兵機制建立了多個哨兵節點(程序),共同監控資料節點的運作狀況。
  2. 同時哨兵節點之間也互相通信,交換對主從節點的監控狀況。
  3. 每隔1秒每個哨兵會向整個叢集:Master主伺服器+Slave從伺服器+其他Sentinel(哨兵)程序,發送一次ping指令做一次心跳檢測。

這個就是哨兵用來判斷節點是否正常的重要依據,涉及兩個新的概念:主觀下線和客觀下線。

1. 主觀下線:一個哨兵節點判定主節點down掉是主觀下線。

2.客觀下線:隻有半數哨兵節點都主觀判定主節點down掉,此時多個哨兵節點交換主觀判定結果,才會判定主節點客觀下線。

3.原理:基本上哪個哨兵節點最先判斷出這個主節點客觀下線,就會在各個哨兵節點中發起投票機制Raft算法(選舉算法),最終被投為上司者的哨兵節點完成主從自動化切換的過程。

Redis 複制(Replication)

Redis為了解決單點資料庫問題,會把資料複制多個副本部署到其他節點上,通過複制,實作Redis的高可用性,實作對資料的備援備份,保證資料和服務的高度可靠性。

資料複制原理(執行步驟)

一文詳解Redis哨兵、複制、叢集原理與差別

①從資料庫向主資料庫發送sync(資料同步)指令。

②主資料庫接收同步指令後,會儲存快照,建立一個RDB檔案。​

③當主資料庫執行完保持快照後,會向從資料庫發送RDB檔案,而從資料庫會接收并載入該檔案。

④主資料庫将緩沖區的所有寫指令發給從伺服器執行。

⑤以上處理完之後,之後主資料庫每執行一個寫指令,都會将被執行的寫指令發送給從資料庫。

注意:在Redis2.8之後,主從斷開重連後會根據斷開之前最新的指令偏移量進行增量複制。

一文詳解Redis哨兵、複制、叢集原理與差別

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

一文詳解Redis哨兵、複制、叢集原理與差別

主從複制是為了資料備份,哨兵是為了高可用,Redis主伺服器挂了哨兵可以切換,叢集則是因為單執行個體能力有限,搞多個分散壓力,簡短總結如下:

主從模式:備份資料、負載均衡,一個Master可以有多個Slaves。

sentinel發現master挂了後,就會從slave中重新選舉一個master。

cluster是為了解決單機Redis容量有限的問題,将資料按一定的規則配置設定到多台機器。

sentinel着眼于高可用,Cluster提高并發量。

1.主從模式:讀寫分離,備份,一個Master可以有多個Slaves。

2.哨兵sentinel:監控,自動轉移,哨兵發現主伺服器挂了後,就會從slave中重新選舉一個主伺服器。

3.叢集:為了解決單機Redis容量有限的問題,将資料按一定的規則配置設定到多台機器,記憶體/QPS不受限于單機,可受益于分布式叢集高擴充性。

更多分布式架構系列、阿裡架構師進階系列,請檢視以下文章:

阿裡架構師進階從0到1全部合集(建議收藏)

一文詳解Redis哨兵、複制、叢集原理與差別

繼續閱讀