Sentinel 是Redis的高可用性解決方案:由一個或多個Sentinel執行個體組成的Sentinel系統可以監視任意多個主伺服器以及它們的下屬從伺服器。
1、Sentinel基本監視原理
如下圖顯示,Sentinel系統監視了一個主伺服器server1和它的三個從伺服器server2、3、4.
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLzcGRNFTQq10MNpHWwYUbiBnTzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuMTOyEDNxMTMxMTNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
當server1因為某種情況下線時,Sentinel系統會對server1做出 故障轉移 處理,将server1的三個從伺服器之一作為新的主伺服器,并将其他從伺服器當作新的主伺服器的slave。
此時,Sentinel系統還會繼續監視之前的server1,當server1恢複工作狀态之後,Sentinel系統會把它設定為server2的從伺服器。
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,讓該領頭來對下線的主伺服器進行故障轉移操作。