Redis脑裂现象
Redis腦裂現(xiàn)象
Redis腦裂現(xiàn)象
什么是Redis的腦裂現(xiàn)象
當(dāng)Redis主從集群環(huán)境出現(xiàn)兩個(gè)主節(jié)點(diǎn)為客戶端提供服務(wù),這時(shí)客戶端請(qǐng)求命令可能會(huì)發(fā)生數(shù)據(jù)丟失的情況。
腦裂出現(xiàn)的場(chǎng)景
場(chǎng)景一
主從哨兵集群中如果當(dāng)發(fā)生主從集群切換時(shí),那么一定是超過(guò)預(yù)設(shè)quorum數(shù)量的哨兵和主庫(kù)連接超時(shí)了,這時(shí)哨兵集群才會(huì)將主庫(kù)判斷為主觀下線,然后哨兵開(kāi)始選舉新的主節(jié)點(diǎn) ,進(jìn)行故障轉(zhuǎn)移,轉(zhuǎn)移完畢后客戶端和新的主節(jié)點(diǎn)通信恢復(fù)正常請(qǐng)求。
如果在哨兵進(jìn)行選舉,故障轉(zhuǎn)移的過(guò)程中原主節(jié)點(diǎn)恢復(fù)和客戶端的通信,那么證明原主節(jié)點(diǎn)沒(méi)有真正的故障 ,這時(shí)客戶端依舊可以向原主節(jié)點(diǎn)正常通信 ,這就是腦裂產(chǎn)生的第一個(gè)場(chǎng)景,示意圖如下
假故障:
1 、同服務(wù)器其它進(jìn)程占用大量CPU資源,導(dǎo)致主節(jié)點(diǎn)短時(shí)間無(wú)法響應(yīng)心跳,CPU資源空閑后恢復(fù)正常。
2、主庫(kù)自身阻塞,如處理bigkey或者發(fā)生內(nèi)存swap時(shí),短時(shí)間無(wú)法響應(yīng)心跳 ,阻塞解決后心跳恢復(fù)正常。
真故障:
1 、服務(wù)器宕機(jī)。
2、實(shí)例進(jìn)程掛了。

場(chǎng)景二
網(wǎng)絡(luò)分區(qū),主節(jié)點(diǎn)和客戶端 ,哨兵和從庫(kù)分割為了兩個(gè)網(wǎng)絡(luò),主庫(kù)和客戶端處在一個(gè)網(wǎng)絡(luò)中,從庫(kù)和哨兵在另外一個(gè)網(wǎng)絡(luò)中,此時(shí)哨兵也會(huì)發(fā)起主從切換 ,出現(xiàn)兩個(gè)主節(jié)點(diǎn)的情況。

腦裂帶來(lái)的影響
腦裂出現(xiàn)后帶來(lái)最嚴(yán)重的后果就是數(shù)據(jù)丟失,為什么會(huì)出現(xiàn)數(shù)據(jù)丟失的問(wèn)題呢,主要原因是新主庫(kù)確定后會(huì)向所有的實(shí)例發(fā)送slave of命令