(1)集羣監控,負責監控Redis master和slave進程是否運行正常node
(2)消息通知,若是某一個Redis出現故障,那麼哨兵將負責發送消息做爲報警通知管理員網絡
(3)故障轉移,若是某一個Redis實例出現故障,會自動轉移到slave node上(故障轉移時,判斷一個master node是否宕機了,須要大部分的哨兵贊成才行,應爲哨兵也是分佈式的)異步
(4)配置中心,若是故障轉移發生了,通知client客戶端新的master地址,哨兵自己也是分佈式的,做爲一個哨兵集羣去運行,互相協同工)分佈式
(1)哨兵須要最少3個實例,來保證本身的健壯性測試
(2)哨兵+Redis的主從部署結構,是不能保證數據零丟失的,只能保證Redis集羣的高可用性code
(3)對於哨兵+Redis的主從部署結構,儘可能在生產和測試環境都作足充分的測試才行進程
若是哨兵只有一個,此時就沒有majority來容許故障轉移了部署
(1)異步複製致使數據丟失同步
異步複製致使數據丟失的緣由是master——》slave的複製是異步的,因此有可能有一部分數據尚未來得及複製到slave,master就已經宕機了,此時這些數據就會丟失。
(2) 腦裂致使的數據丟失it
也就是說,某一個master所在的機器忽然斷開了網絡鏈接,根其餘的slave機器鏈接不上,可是實際上這時候master還活着,可是哨兵認爲master已經宕機了,而後開始選舉,將其餘的slave選舉爲master,這個時候集羣裏就會有兩個master,可是client可能尚未切換到新的master,還繼續寫向舊的master的數據可能也會丟失,所以舊的master再次回覆的時候,會被做爲一個新的slave掛在到新的master上去,本身的數據就會被清空,從新重新的master複製數據
min-slaves-to-write 1
min-slaves-max-lag 10
(1) 一旦slave複製數據和ack延時太長,就認爲可能master宕機後損失的數據太多了,那麼就拒絕寫請求,這樣就能夠把master宕機時的部分數據未同步到slave致使丟失的數據下降到可控的範圍以內。
(2)若是不能繼續給指定數量的slave發送數據,並且slave超過10秒沒有給本身的ack消息,那麼直接拒絕客戶端的寫請求,這樣腦裂後的舊master就不會接受新的數據,也就避免了數據丟,上面的配置也就確保了,若是跟任何一個slave丟失了鏈接,在10秒後發現沒有slave給本身ack,那麼就拒絕新的請求,所以在腦裂的狀況之下,就會丟失10秒的數據。