天天看點

Redis哨兵Sentinel

Sentinel 是Redis的高可用性解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器以及它們的下屬從伺服器。

1、Sentinel基本監視原理

如下圖顯示,Sentinel系統監視了一個主伺服器server1和它的三個從伺服器server2、3、4.

Redis哨兵Sentinel

當server1因為某種情況下線時,Sentinel系統會對server1做出 故障轉移 處理,将server1的三個從伺服器之一作為新的主伺服器,并将其他從伺服器當作新的主伺服器的slave。

Redis哨兵Sentinel

此時,Sentinel系統還會繼續監視之前的server1,當server1恢複工作狀态之後,Sentinel系統會把它設定為server2的從伺服器。

Redis哨兵Sentinel
2、Sentinel的啟動與使用

當Sentinel啟動之後,就不能使用一般的Redis伺服器指令了,隻能使用這7個sentinel指令:ping、sentinel、info、subscribe、unsubscribe、psubscribe和punsubscribe。

指令連接配接 監視

Sentinel會與伺服器建立指令連接配接,使Sentinel可以向伺服器發送指令。

建立指令連接配接之後:

1、Sentinel預設以10秒一次的頻率向與其連接配接的主從伺服器 通過指令連接配接 發送INFO指令,通過分析INFO指令的回複來擷取伺服器目前的資訊和拓撲結構。

2、Sentinel預設以2秒一次的頻率 通過 指令連接配接 向特定頻道發送指令(以釋出-訂閱方式),伺服器會通過 訂閱連接配接 向頻道傳回資訊,這樣通過頻道的方式會使所有訂閱了該頻道的其他sentinel也接收到相關資訊。

訂閱連接配接

Sentinel除了與連接配接的伺服器建立 指令連接配接 之外,還會建立 訂閱連接配接,多個sentinel可以和同一個伺服器建立 訂閱連接配接,這樣當一個sentinel通過頻道向伺服器發送一條消息的時候,其他sentinel都可以發現,這種方式可以加強sentinel之間的交流。

主觀下線

預設情況下,Sentinel以每秒一次的頻率向所有與它建立連接配接的執行個體(包括主、從伺服器、其他Sentinel)發送ping指令,并根據回複判斷執行個體是否線上。如果不線上,就認定該執行個體為主觀下線狀态(僅這個Sentinel的判定)。

可觀下線

當一個Sentinel判定一個主伺服器為主觀下線之後(但這隻是它一個人的判斷),為了确認這個主伺服器是否真的下線,它會詢問其他監視該主伺服器的Sentinel,如果這個Sentinel從其他Sentinel那裡得到了足夠數量的證據證明該伺服器下線,就判定該伺服器為客觀下線。

選舉領頭Sentinel

當一個主伺服器被判斷為客觀下線時,監視該伺服器的所有Sentinel會進行協商,選舉出一個領頭Sentinel,讓該領頭來對下線的主伺服器進行故障轉移操作。

繼續閱讀