背景
Redis單獨實現了一個Sentinel模塊,用於監聽主從實例,主動下線問題的主實例,替換從實例,以達到Redis的高可用。
初始化
初始化Sentinel時指定監控的主實例列表masters,向主實例們改起連接,僞裝成它們的一個客戶端。Sentinel每隔十秒發送一條INFO消息給主服務器,獲取主服務器狀態,及對應的從服務器實例並連接。
連接其它結點
Sentinel還以兩秒一次的頻率,向主從實例publish指定頻道的信息,同時也監控這個頻道。通過這種方式不同的Sentinel服務器可以相互感知到對方——Sentinel之間因此知道了彼此的ip,彼此連接起來,僞裝成對方的客戶端。
下線
- 主觀下線:每秒一次向所有主、從、Sentinel服務器發送PING命令,若不返回說明斷連。一定時間內斷連,Sentinel將此服務器標爲“主觀下線”
- 客觀下線:足夠多的Sentinel實例認爲一個結點主觀下線,則構成“客觀下線”。
- 故障轉移:客觀下線後Sentinel通過raft算法選出一個執行者,對下線的主服務器進行故障轉移,挑選其從服務器成爲新的主。