1.sential模式下的腦裂問題
1.1 問題描述
指因為網(wǎng)絡問題忆畅,導致redis master節(jié)點跟redis slave節(jié)點和sentinel集群處于不同的網(wǎng)絡分區(qū)坑雅,
此時因為sentinel集群無法感知到master的存在辆童,所以將slave節(jié)點提升為master節(jié)點恰起。
此時存在兩個不同的master節(jié)點,就像一個大腦分裂成了兩個颁褂。
腦裂問題中故响,如果客戶端還在基于原來的master節(jié)點繼續(xù)寫入數(shù)據(jù),
那么新的master節(jié)點將無法同步這些數(shù)據(jù)颁独,當網(wǎng)絡問題解決之后彩届,
sentinel集群將原先的master節(jié)點降為slave節(jié)點,
此時再從新的master中同步數(shù)據(jù)奖唯,將會造成大量的數(shù)據(jù)丟失惨缆。
1.2 解決方案
#舊版本
min-slaves-to-write 3
min-slaves-max-lag 10
#新版本
min-replicas-to-write 3
min-replicas-max-lag 10
第一個參數(shù)表示連接到master的最少slave數(shù)量
第二個參數(shù)表示slave連接到master的最大延遲時間
按照上面的配置,要求至少3個slave節(jié)點丰捷,且數(shù)據(jù)復制和同步的延遲不能超過10秒坯墨,
否則的話master就會拒絕寫請求,配置了這兩個參數(shù)之后病往,
>> 如果發(fā)生集群腦裂捣染,原先的master節(jié)點接收到客戶端的寫入請求會拒絕,
就可以減少數(shù)據(jù)同步之后的數(shù)據(jù)丟失停巷。
>> redis中的異步復制情況下的數(shù)據(jù)丟失問題也能使用這兩個參數(shù), 但需要考量性能與可用性耍攘。
2.集群(cluster)模式下的腦裂問題
參考資料
https://www.cnblogs.com/yjmyzz/p/redis-split-brain-analysis.html