一、兩種數據丟失的狀況
二、解決異步複製和腦裂致使的數據丟失網絡
------------------------------------------------------------------異步
一、兩種數據丟失的狀況blog
主備切換的過程,可能會致使數據丟失同步
(1)異步複製致使的數據丟失it
由於master -> slave的複製是異步的,因此可能有部分數據還沒複製到slave,master就宕機了,此時這些部分數據就丟失了ast
(2)腦裂致使的數據丟失集羣
腦裂,也就是說,某個master所在機器忽然脫離了正常的網絡,跟其餘slave機器不能鏈接,可是實際上master還運行着cli
此時哨兵可能就會認爲master宕機了,而後開啓選舉,將其餘slave切換成了master配置
這個時候,集羣裏就會有兩個master,也就是所謂的腦裂請求
此時雖然某個slave被切換成了master,可是可能client還沒來得及切換到新的master,還繼續寫向舊master的數據可能也丟失了
所以舊master再次恢復的時候,會被做爲一個slave掛到新的master上去,本身的數據會清空,從新重新的master複製數據
------------------------------------------------------------------
二、解決異步複製和腦裂致使的數據丟失
min-slaves-to-write 1
min-slaves-max-lag 10
要求至少有1個slave,數據複製和同步的延遲不能超過10秒
若是說一旦全部的slave,數據複製和同步的延遲都超過了10秒鐘,那麼這個時候,master就不會再接收任何請求了
上面兩個配置能夠減小異步複製和腦裂致使的數據丟失
(1)減小異步複製的數據丟失
有了min-slaves-max-lag這個配置,就能夠確保說,一旦slave複製數據和ack延時太長,就認爲可能master宕機後損失的數據太多了,那麼就拒絕寫請求,這樣能夠把master宕機時因爲部分數據未同步到slave致使的數據丟失下降的可控範圍內
(2)減小腦裂的數據丟失
若是一個master出現了腦裂,跟其餘slave丟了鏈接,那麼上面兩個配置能夠確保說,若是不能繼續給指定數量的slave發送數據,並且slave超過10秒沒有給本身ack消息,那麼就直接拒絕客戶端的寫請求
這樣腦裂後的舊master就不會接受client的新數據,也就避免了數據丟失
上面的配置就確保了,若是跟任何一個slave丟了鏈接,在10秒後發現沒有slave給本身ack,那麼就拒絕新的寫請求
所以在腦裂場景下,最多就丟失10秒的數據