您的位置:首頁 > 軟件教程 > 教程 > Redis腦裂問題及解決方法

Redis腦裂問題及解決方法

來源:好特整理 | 時(shí)間:2024-04-18 08:57:38 | 閱讀:115 |  標(biāo)簽: 解決方法 S 騰訊 音樂   | 分享到:

Redis 腦裂問題是指,在 Redis 哨兵模式或集群模式中,由于網(wǎng)絡(luò)原因,導(dǎo)致主節(jié)點(diǎn)(Master)與哨兵(Sentinel)和從節(jié)點(diǎn)(Slave)的通訊中斷,此時(shí)哨兵就會(huì)誤以為主節(jié)點(diǎn)已宕機(jī),就會(huì)在從節(jié)點(diǎn)中選舉出一個(gè)新的主節(jié)點(diǎn),此時(shí) Redis 的集群中就出現(xiàn)了兩個(gè)主節(jié)點(diǎn)的問題,就是 Redis

Redis腦裂問題是指在Redis哨兵模式或集群模式中,由于網(wǎng)絡(luò)原因,導(dǎo)致主節(jié)點(diǎn)(Master)與哨兵(Sentinel)和從節(jié)點(diǎn)(Slave)的通訊中斷。這會(huì)導(dǎo)致哨兵誤以為主節(jié)點(diǎn)已宕機(jī),從而在從節(jié)點(diǎn)中選舉出一個(gè)新的主節(jié)點(diǎn),造成Redis集群中出現(xiàn)兩個(gè)主節(jié)點(diǎn)的問題。

腦裂問題的影響

Redis腦裂問題會(huì)導(dǎo)致數(shù)據(jù)丟失。具體來說,當(dāng)舊的Master節(jié)點(diǎn)變?yōu)镾lave節(jié)點(diǎn)后,數(shù)據(jù)丟失的過程如下:

Redis腦裂問題及解決方法
  1. Slave(舊Master)向新Master申請(qǐng)全量數(shù)據(jù)。
  2. 新Master通過bgsave方式生成當(dāng)前RDB快照,并將RDB發(fā)送給Slave。
  3. Slave拿到RDB后,先進(jìn)行flush清空當(dāng)前數(shù)據(jù)(此時(shí)舊客戶端給他的發(fā)送的數(shù)據(jù)就丟失了)。
  4. 之后再加載RDB數(shù)據(jù),初始化自己當(dāng)前的數(shù)據(jù)。

在執(zhí)行到第三步的時(shí)候,原客戶端在舊Master寫入的數(shù)據(jù)就丟失了,這就是數(shù)據(jù)丟失的問題。

如何解決腦裂問題?

腦裂問題只需要在舊Master恢復(fù)網(wǎng)絡(luò)之后,切換身份為Slave期間,不接收客戶端的數(shù)據(jù)寫入即可。為解決這個(gè)問題,Redis提供了以下兩個(gè)配置:

  • min-slaves-to-write :與主節(jié)點(diǎn)通信的從節(jié)點(diǎn)數(shù)量必須大于等于該值主節(jié)點(diǎn),否則主節(jié)點(diǎn)拒絕寫入。
  • min-slaves-max-lag :主節(jié)點(diǎn)與從節(jié)點(diǎn)通信的ACK消息延遲必須小于該值,否則主節(jié)點(diǎn)拒絕寫入。

這兩個(gè)配置項(xiàng)必須同時(shí)滿足,不然主節(jié)點(diǎn)拒絕寫入。在假故障期間滿足min-slaves-to-write和min-slaves-max-lag的要求,那么主節(jié)點(diǎn)就會(huì)被禁止寫入,腦裂造成的數(shù)據(jù)丟失情況自然也就解決了。

課后思考

設(shè)置了參數(shù)之后,Redis腦裂問題能完全被解決嗎?為什么?Zookeeper有腦裂問題嗎?它是如何解決腦裂問題的?

本文已收錄到我的面試小站www.javacn.site,其中包含的內(nèi)容有:Redis、JVM、并發(fā)、并發(fā)、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設(shè)計(jì)模式、消息隊(duì)列等模塊。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)