Redis Cluster 不保證強一致性,在某些特殊場景,客戶端即使收到了寫入確認,還是可能遺失資料的。
場景1:非同步複製
- client 寫入master B
- master B 回覆OK ##master B 同步至slave B1 B2 B3
wait 指令可以增強這種場景的資料安全性。
wait 會阻斷目前 client 直到先前的寫入作業被指定數量的 slave 同步成功。
wait 可以提高資料的安全性,但不保證強一致性。
A, B, C, A1, B1, C1,3個master,3個slave,還有一個client ,
Z1。
發生網路分割區之後,形成了2個區,
A, C, A1, B1, C1和
B Z1。
這時Z1 還是可以寫入B 的,如果短時間內分割區就恢復了,那就沒問題,整個叢集繼續正常運作,但如果時間一長,B1 就會成為所在分區的master,Z1 寫入B 的資料就丟了。
maximum window(最大時間視窗) 可以減少資料損失,可以控制Z1 向B 寫入的總數:
時間量是非常重要的,稱為節點過期時間。
一個 master 在達到過期時間後,就被認為是故障的,進入 error 狀態,停止接收寫入請求,可以被 slave 取代。 小結Redis Cluster 不保證強一致性,存在遺失資料的場景:- 異步複製
wait 指令可以給予同步複製,但也無法完全保證資料不丟,而且影響效能。
- 網路分區
推薦學習:《redis教學》
#