- [ ]
一、哨兵(sentinal)的介紹
哨兵是redis叢集架構中非常重要的一個元件,主要功能如下:
- 叢集監控,負責監控redis master和slave程式是否正常工作
- 訊息通知,如果某個redis例項有故障,那麼哨兵負責傳送訊息作為報警通知給管理員
- 故障轉移,如果master node掛掉了,會自動轉移到slave node上
- 配置中心,如果故障轉移發生了,通知client客戶端新的master地址
哨兵本身也是分散式的,作為一個哨兵叢集去執行,互相協同工作
-
故障轉移時,判斷一個master node當機了,需要大部分的哨兵都同意才行,涉及到了分散式選舉的問題
-
即使部分哨兵節點掛掉了,哨兵叢集還是能正常工作的
二、主觀和客觀當機
sdown:主觀當機,就一個哨兵如果自己覺得一個master當機了,那麼就是主觀當機
odown:客觀當機,如果quorum數量的哨兵都覺得一個master當機了,那麼就是客觀當機
達成條件
sdown:,如果一個哨兵ping一個master,超過了is-master-down-after-milliseconds指定的毫秒數之後,就主觀認為master當機
odown:如果一個哨兵在指定時間內,收到了quorum指定數量的其他哨兵也認為那個master是sdown了,那麼就認為是odown了,客觀認為master當機
三、哨兵叢集的自動發現機制
哨兵互相之間的發現,是通過redis的pub/sub系統實現的。
- 每隔兩秒鐘,每個哨兵都會往自己監控的某個master+slaves對應的__sentinel__:hello channel裡傳送一個訊息,內容是自己的host、ip和runid還有對這個master的監控配置
- 每個哨兵也會去監聽自己監控的每個master+slaves對應的__sentinel__:hello channel,然後去感知到同樣在監聽這個master+slaves的其他哨兵的存在
- 每個哨兵還會跟其他哨兵交換對master的監控配置,互相進行監控配置的同步
四、slave配置的自動糾正
哨兵會負責自動糾正slave的一些配置,比如slave如果要成為潛在的master候選人,哨兵會確保slave在複製現有master的資料; 如果slave連線到了一個錯誤的master上,比如故障轉移之後,那麼哨兵會確保它們連線到正確的master上
hi~我是Mirror,一個為了自由安逸的未來而不斷前進的的程式設計師。
如果你覺得文章對你有一點點幫助,一個小小贊,便是對我的認可,如果有不足之處,也歡迎各位指正。