《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正在對主伺服器進行故障轉移
8)監視同一個主伺服器和從伺服器的多個sentinel,它們會以兩秒一次的頻率,通過向被監視的伺服器的_sentinel_:hello頻道傳送訊息來向其他sentinel宣告自己的存在。
每個sentinel也會從_sentinel_:hello頻道接受其他sentinel發來的訊息,並根據這些資訊來為其他sentinel建立相應的例項結構,以及命令連線
9)sentinel以每秒一次的頻率向例項(主伺服器、從伺服器、sentinel)傳送PING命令,判斷例項是否線上。
當一個例項在指定的時長連續向sentinel傳送無效回覆時,sentinel會將這個例項判斷為主觀下線
10)當sentinel將一個主伺服器判斷為主觀下線時,他會先向同樣監視這個主伺服器的其他sentinel進行詢問,看他們是否同意這個主伺服器已經進入主觀下線狀態。
11)當sentinel收集到足夠多的主觀下線投票時,他會將主伺服器判斷為客觀下線,併發起一次針對主伺服器的故障轉移操作。