哨兵機制(Redis Sentinel)

  1. 哨兵機制

(1) 哨兵機制的核心功能

① 核心功能是主節點的自動故障轉移

(2) 下圖是一張典型的哨兵集羣監控的邏輯圖

 

 

 

(3) 哨兵實現了什麼功能?

① 監控:哨兵會不斷的檢查主節點和從節點是否運行正常

② 自動故障轉移:當主節點不能正常運行時,哨兵會開始自動故障轉移操作,它會將失效主節點的其中一個節點升級爲新的主節點,並讓其他節點改爲複製新的主節點

③ 配置提供者:客戶端在初始化時,通過連接哨兵來獲得當前Redis服務的主節點地址

④ 通知:哨兵可以將故障轉移的結果發送給客戶端

  1. 哨兵集羣的組建

(1) 哨兵集羣是如何組建的?

① 哨兵實例之間可以相互發現,要歸公於Redis提供的pub/sub機制,也就是發佈/訂閱機制

② 實例

1) 在主從集羣中,主庫上有一個名爲__sentinel__:hello的頻道,不同哨兵就是通過它來相互發現,實現相互通信的,在下圖中,哨兵1把自己的IP(172.16.19.3)和端口(26579)發佈到__sentinel__:hello頻道上,哨兵2和哨兵3訂閱了該頻道。此時,哨兵2和哨兵3就可以從這個頻道上直接獲取哨兵1IP地址和端口號。然後哨兵23就可以和哨兵1建立網絡連接

2) 圖示

 

 

 

  1. 哨兵監控Redis

(1) 哨兵監控什麼?如何監控?

① 這是由哨兵向主庫發送INFO命令來完成的。如下圖,哨兵2給主庫發送INFO命令,主庫接收到這個命令後,就會把從庫列表返回給哨兵。接着哨兵就可以根據從庫列表中的連接信息,和每個從庫建立連接,並在這個連接上持續地對從庫進行監控,哨兵1和哨兵3可以通過相同的方式和從庫建立連接

② 圖示

 

 

 

  1. 主庫下線的判斷

(1) 哨兵如何判斷主庫已經下線了?

① 分類

1) 主觀下線:任何一個哨兵都可以監控探測,並作出Redis節點下線的判斷

2) 客觀下線:由哨兵集羣共同決定Redis是否下線

② 實例

1) 當某個哨兵(如下圖中的哨兵2)判斷主庫”主庫下線”後,就會給其他哨兵發送is-master-down-by-addr命令。接着其他哨兵根據自己和主庫的連接情況,做出Y或者N的響應,Y相當於贊成票,N相當於反對票

2) 圖示

 

 

 

如果贊成票數(上面是2)是大於等於哨兵配置文件中的quorum配置項(比如這裏如果是quorum=2),則可以判定主庫客觀下線了

  1. 哨兵集羣的選取(重點)

(1) 爲什麼必然會出現選舉/共識機制?

① 爲了避免哨兵的單點情況的發生,所以需要一個哨兵的分佈式集羣。作爲分佈式集羣,必然涉及到共識問題(即選舉問題);同時故障的轉移和通知都只需要一個主的哨兵節點就可以了

(2) 哨兵的選舉機制是什麼樣的?

① 描述

1) 哨兵的選舉機制就是一個Raft選舉算法:選舉的票數大於等於num(sentinel)/2+1時,將成爲領導者,如果沒有超過繼續選舉

(3) 任何一個想要成爲Leader的哨兵,要滿足兩個條件

① 拿到半數以上的贊成票

② 拿到票數的同時還要大於等於哨兵配置文件中的quorum

(4) 區分判定客觀下線和是否能夠主從切換(用到選舉機制)兩個概念

① Redis一主四從,五個哨兵,哨兵配置quorum=2,如果三個哨兵故障,哨兵能否判斷主庫”客觀下線”?能否自動切換?

1) 哨兵集羣可以判定主庫”主庫下線”。由於quorum=2,所以當一個哨兵判斷主庫”主管下線”後。詢問另外一個哨兵也會得到同樣的結果,2個哨兵都達到了quorum值,因此,哨兵集羣可以判定主庫爲”客觀下線”

2) 哨兵不能完成主從切換。哨兵標記主庫”客觀下線”後,在選舉哨兵領導者時,一個哨兵必須拿到超過多數的選票5/2+1=3.但是,目前只有兩個哨兵或者,所以無論如果達不到N/2+1的結果

  1. 新主庫的選出

(1) 主庫既然已經判定客觀下線了,那麼如果從剩餘的從庫中選擇一個新的主庫呢?

① 過濾掉不健康的(下線或斷線),沒有回覆過哨兵響應的從節點

② 選擇slave-priority從優先級最高(redis.conf)

③ 選擇複製偏移量最大,指複製最完整的從節點

④ 圖解

 

 

 

  1. 故障的轉移:新的主庫選擇出來後,就可以開始進行故障的轉移了

(1) 實例:假設一開始的圖:判斷主庫客觀下線了,同時選出了sentinel3是哨兵的leader

(2) 故障轉移流程下

① slave-1脫離原從節點,升級爲主節點

② 將從節點slave-2指向新的主節點

③ 通知客戶端主節點已經更換

④ 將原主節點變爲從節點,指向新的主節點

 

 

 

(3) 轉移之後

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章