關於reids集群會由於網絡等原因出現腦裂的情況,所謂的集群腦裂就是,由於redis master節點和redis salve節點和sentinel處於不同的網絡分區,使得sentinel沒有能夠心跳感知到master,所以通過選舉的方式提升了一個salve為master,這樣就存在了兩個master,就像大腦分裂了一樣,這樣會導致客戶端還在old master那里寫入數據,新節點無法同步數據,當網絡恢復后,sentinel會將old master降為salve,這時再從新master同步數據,這會導致大量數據丟失。
解決方案:
redis中有兩個配置參數:
(舊版本)
min-slaves-to-write 3
min-slaves-max-lag 10
(新版本)
min-replicas-to-write 3
min-replicas-max-lag 10
第一個參數表示最少的salve節點為3個,第二個參數表示數據復制和同步的延遲不能超過10秒
配置了這兩個參數:如果發生腦裂:原master會在客戶端寫入操作的時候拒絕請求。這樣可以避免大量數據丟失。