1. 程式人生 > 資料庫 >《redis高可用》之sentinel

《redis高可用》之sentinel

啟動sentinel

  • 1)初始化伺服器
  • 2)將普通redis伺服器使用的程式碼替換成sentinel專用程式碼
  • 3)初始化sentinel狀態
  • 4)初始化sentinel的監視 主服務列表
  • 5)建立連向主伺服器的網路連線

 

1)初始化伺服器

2)將普通redis伺服器使用的程式碼替換成sentinel專用程式碼

sentinel只是執行在特殊模式下的redis伺服器,它使用了和普通模式不同的命令表,所以sentinel模式能夠使用的命令和普通redis伺服器使用的命令不同

 

3)初始化sentinel狀態

4)初始化sentinel的監視 主服務列表

sentinel會讀入使用者指定的配置檔案,為每個要被監視的主伺服器建立相應的例項結構

 

5)建立連向主伺服器的網路連線

對於每個被sentinel監視的主伺服器來說,sentinel會建立兩個連向主伺服器的非同步網路連線

  1)命令連線,這個連線專門用於向主伺服器傳送命令,並接受命令回覆。

  2)訂閱連線,這個連線專門用於訂閱主伺服器的_sentinel_:hello頻道

 

6)sentinel會向主伺服器傳送INFO命令來獲取主伺服器下所有從伺服器,

  併為這些從伺服器建立響應的例項結構,以及連向這些從伺服器的命令連線和訂閱連線

 

7)一般情況下,sentinel會每十秒一次的頻率向被監視的主伺服器和從伺服器傳送INFO命令

  當主伺服器處於下線狀態,或者sentinel正在對主伺服器進行故障轉移

操作時,sentinel向從伺服器傳送INFO命令的頻率會改為每秒一次

 

8)監視同一個主伺服器和從伺服器的多個sentinel,它們會以兩秒一次的頻率,通過向被監視的伺服器的_sentinel_:hello頻道傳送訊息來向其他sentinel宣告自己的存在。

  每個sentinel也會從_sentinel_:hello頻道接受其他sentinel發來的訊息,並根據這些資訊來為其他sentinel建立相應的例項結構,以及命令連線

 

9)sentinel以每秒一次的頻率向例項(主伺服器、從伺服器、sentinel)傳送PING命令,判斷例項是否線上。

  當一個例項在指定的時長連續向sentinel傳送無效回覆時,sentinel會將這個例項判斷為主觀下線

 

10)當sentinel將一個主伺服器判斷為主觀下線時,他會先向同樣監視這個主伺服器的其他sentinel進行詢問,看他們是否同意這個主伺服器已經進入主觀下線狀態。

 

11)當sentinel收集到足夠多的主觀下線投票時,他會將主伺服器判斷為客觀下線,併發起一次針對主伺服器的故障轉移操作。