哨兵經典架構
sentinel結構
哨兵工作原理
Sentinel 通過配置文件發現Master,如下:
Sentinel 通過向Master發送 INFO 命令來自動獲得所有Slave的地址
跟Master一樣,Sentinel 會與每個被發現的Slave創建命令連接和訂閱連接
Sentinel 會通過命令連接向被監視的主從服務器發送 HELLO 信息,該消息包含 Sentinel 的 IP、端口號、ID 等內容,以此來向其他 Sentinel 宣告自己的存在。與此同時,Sentinel 會通過訂閱連接接收其他 Sentinel 的HELLO 信息,以此來發現監視同一個Master的其他 Sentinel
Sentinel 之間會互相創建命令連接,用於進行通信。
因為已經有主從服務器作為發送和接收 HELLO 信息的中介,所以 Sentinel之間不會創建訂閱連接。
Sentinel 使用 PING 命令來檢測實例的狀態:如果實例在指定的時間內沒有返回回復,或者返回錯誤的回復,那么該實例會被 Sentinel 判斷為SDOWN(subjectively down,主觀下線)。
注意:只有一台Sentinel將服務器標記為SDOWN不會觸發Failover。只有一定數量的Sentinel都將該服務器標記為SDOWN后,服務器才會被標記為ODOWN(objectively down,客觀下線),這時才會觸發Failover過程。
參數down-after-milliseconds指定了 Sentinel 認為服務器已經斷線所需的毫秒數。
參數quorum用來控制Sentinel投票數
注意:源碼中SDOWN對應PFAIL消息,ODOWN對應FAIL消息
Automatic Failover
在下線Master的所有Slave中,選出一個數據狀態最接近Master的Slave,選擇的條件包括:Slave未下線、主從之間的連接斷開時間最短,等等。
Sentinel 向被選中的Slave發送 SLAVEOF NO ONE ,將它升級為Master。
向其他Slave發送 SLAVEOF 命令,讓它們復制新的Master。