在 Redis 的主從庫模式中,如果從庫發生了故障,使用者的操作是可以繼續進行的,因為寫操作是隻在主庫中進行的。那麼,如果主庫發生了故障,使用者的操作將會收到影響。這時候可能會需要選擇一個從庫在作為主庫繼續服務使用者的操作。Redis 提供的哨兵機制就是解決主從庫模式的 Redis 服務可用性問題的。
哨兵發現主庫下線並選出新主庫的流程稱為故障轉移,這個過程需要解決三個問題:
哨兵在執行過程中週期性的給所有主從庫傳送 PING 命令,以此檢測它們是否正常執行。如果某個範例對 PING 命令的沒有在down-after-milliseconds
應答,那麼,哨兵會把它標記為「主觀下線」。
哨兵不會對主觀下線的從庫做額外的處理,如果是主庫主觀下線,那麼哨兵會進行後續的選主和通知操作,這些操作會有額外的計算和通訊開銷。為了減少誤判,哨兵通常會採用叢集部署。當一個哨兵將 master 標記為主觀下線後,會和其它哨兵範例通過命令 SENTINEL is-master-down-by-addr
交流,如果有大於 quorum
個哨兵確認 master 已下線,則該 master 會被標記為」客觀下線」;否則,會重新將 master 標記為上線狀態。