課程大綱
1、兩種數據丟失的情況
2钧汹、解決異步復制和腦裂導致的數據丟失
------------------------------------------------------------------
1丈探、兩種數據丟失的情況
主備切換的過程,可能會導致數據丟失
(1)異步復制導致的數據丟失
因為master -> slave的復制是異步的拔莱,所以可能有部分數據還沒復制到slave碗降,master就宕機了,此時這些部分數據就丟失了
(2)腦裂導致的數據丟失
腦裂塘秦,也就是說讼渊,某個master所在機器突然脫離了正常的網絡,跟其他slave機器不能連接尊剔,但是實際上master還運行著
此時哨兵可能就會認為master宕機了爪幻,然后開啟選舉,將其他slave切換成了master
這個時候须误,集群里就會有兩個master挨稿,也就是所謂的腦裂
此時雖然某個slave被切換成了master,但是可能client還沒來得及切換到新的master京痢,還繼續(xù)寫向舊master的數據可能也丟失了
因此舊master再次恢復的時候奶甘,會被作為一個slave掛到新的master上去,自己的數據會清空祭椰,重新從新的master復制數據
------------------------------------------------------------------
2臭家、解決異步復制和腦裂導致的數據丟失
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丟了連接,那么上面兩個配置可以確保說钱慢,如果不能繼續(xù)給指定數量的slave發(fā)送數據逮京,而且slave超過10秒沒有給自己ack消息,那么就直接拒絕客戶端的寫請求
這樣腦裂后的舊master就不會接受client的新數據束莫,也就避免了數據丟失
上面的配置就確保了懒棉,如果跟任何一個slave丟了連接,在10秒后發(fā)現沒有slave給自己ack览绿,那么就拒絕新的寫請求
因此在腦裂場景下策严,最多就丟失10秒的數據