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

Redis腦裂問題及解決方法

來源:好特整理 | 時間:2024-04-18 08:57:38 | 閱讀:132 |  標簽: 解決方法 S 騰訊 音樂   | 分享到:

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

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

腦裂問題的影響

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

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

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

如何解決腦裂問題?

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

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

這兩個配置項必須同時滿足,不然主節(jié)點拒絕寫入。在假故障期間滿足min-slaves-to-write和min-slaves-max-lag的要求,那么主節(jié)點就會被禁止寫入,腦裂造成的數(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è)計模式、消息隊列等模塊。

小編推薦閱讀

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

相關(guān)視頻攻略

更多

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

掃二維碼進入好特網(wǎng)微信公眾號!

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

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