腦裂問題(面試必備)小泉,值得收藏

轉(zhuǎn)眼間再過一個月就到2022年了,臨近年底有不少小伙伴問沐子冕杠,自己想要換工作微姊,但是不知道是年前換好,還是年后換比較好呢分预?沐子一直的觀點都是兢交,換工作的時候只要你想清楚了,在現(xiàn)在的公司已經(jīng)無法成長或者看不到希望時笼痹,到了非換不可的地步配喳,那么只要有合適的下家的前提下,隨時都可以換凳干。從沐子多年的工作經(jīng)驗界逛,以及跟身邊一些資深HR溝通后,總結(jié)出來一些經(jīng)驗纺座,那就是年前和年后都各有一個找工作的好時機(jī)息拜,主要看求職者自身為換工作準(zhǔn)備得是否充分。

我們在工作中可能很少碰到腦裂的問題净响,但是面試官想要了解面試者的經(jīng)歷和解決復(fù)雜問題的能力少欺,常常也會涉及到此類問題。小編主要以Redis馋贤、Zookeeper為例重點講解腦裂問題和合適的解決方案赞别,為粉絲們在面試中增加亮點。

一配乓、 Redis集群腦裂

什么是redis的集群腦裂仿滔?

在哨兵架構(gòu)中,redis的集群腦裂是某個master所在機(jī)器突然脫離了正常的網(wǎng)絡(luò)犹芹,導(dǎo)致redis master節(jié)點跟redis slave節(jié)點和sentinel集群處于不同的網(wǎng)絡(luò)分區(qū)崎页,此時因為sentinel集群無法感知到master的存在,哨兵可能就會認(rèn)為master宕機(jī)了腰埂,然后開啟選舉飒焦,將其他slave切換成了master,這個時候集群里就會有兩個master屿笼,也就是所謂的腦裂牺荠。

出現(xiàn)集群腦裂后翁巍,如果客戶端還在基于原來的master節(jié)點繼續(xù)寫入數(shù)據(jù),那么新的master節(jié)點將無法同步這些數(shù)據(jù)休雌,當(dāng)網(wǎng)絡(luò)問題解決之后灶壶,sentinel集群將原先的master節(jié)點降為slave節(jié)點,此時再從新的master中同步數(shù)據(jù)杈曲,將會造成大量的數(shù)據(jù)丟失例朱。

解決方案

由于腦裂是由網(wǎng)絡(luò)等原因造成的,除了提高網(wǎng)絡(luò)鱼蝉、硬件等方法外养涮,主要通過增加以下配置凳鬓,改善出現(xiàn)腦裂而引發(fā)的數(shù)據(jù)丟失問題锥忿。

min-slaves-to-write 1 // 要求至少有1個slave

min-slaves-max-lag 10 //數(shù)據(jù)復(fù)制和同步的延遲不能超過10秒

如果一個master出現(xiàn)了腦裂邀摆,跟其他slave丟了連接,那么上面兩個配置可以確保說洁奈,如果不能繼續(xù)給指定數(shù)量的slave發(fā)送數(shù)據(jù)间唉,而且slave超過10秒沒有給自己ack消息,那么就直接拒絕客戶端的寫請求利术。這樣腦裂后的舊master就不會接受client的新數(shù)據(jù)呈野,最多就丟失10秒的數(shù)據(jù),也就避免了大量長時間的數(shù)據(jù)丟失印叁。

二被冒、 Zookeeper集群腦裂

什么是Zookeeper的集群腦裂?

ZooKeeper是用來協(xié)調(diào)(同步)分布式進(jìn)程的服務(wù)轮蜕,提供了一個簡單高性能的協(xié)調(diào)內(nèi)核昨悼,用戶可以在此之上構(gòu)建更多復(fù)雜的分布式協(xié)調(diào)功能。下面以Zookeeper集群為例跃洛,講解出現(xiàn)腦裂的情況率触。

從下圖中可以看到,正常狀態(tài)的時候汇竭,節(jié)點

5 作為主節(jié)點葱蝗,其他節(jié)點作為備節(jié)點;當(dāng)連接發(fā)生故障時细燎,節(jié)點 1两曼、節(jié)點 2、節(jié)點 3 形成了一個子集群找颓,節(jié)點 4合愈、節(jié)點 5

形成了另外一個子集群叮贩,這兩個子集群的連接已經(jīng)中斷击狮,無法進(jìn)行信息交換佛析。按照規(guī)則和算法,兩個子集群分別選出了節(jié)點 2 和節(jié)點 5

作為主節(jié)點彪蓬,此時整個系統(tǒng)就出現(xiàn)了兩個主節(jié)點寸莫。這個狀態(tài)違背了系統(tǒng)設(shè)計的初衷,兩個主節(jié)點會各自做出自己的決策档冬,整個系統(tǒng)的狀態(tài)就混亂了膘茎。這時候整個系統(tǒng)就很混亂可能有一部分client已經(jīng)通知到了連接到新的leader上去了,有的client仍然連接在老的leader上酷誓,如果同時有兩個client需要對leader的同一個數(shù)據(jù)更新披坏,并且剛好這兩個client此刻分別連接在新老的leader上,就會出現(xiàn)很嚴(yán)重問題盐数。

解決方案

要解決腦裂的問題棒拂,一般有下面幾種方法:

1、zooKeeper默認(rèn)采用了Quorums這種方式來防止"腦裂"現(xiàn)象玫氢。即只有集群中超過半數(shù)節(jié)點投票才能選舉出Leader帚屉。這樣的方式可以確保leader的唯一性,要么選出唯一的一個leader,要么選舉失敗。在zookeeper中Quorums作用如下:

【1】 集群中最少的節(jié)點數(shù)用來選舉leader保證集群可用漾峡。

【2】 通知客戶端數(shù)據(jù)已經(jīng)安全保存前集群中最少數(shù)量的節(jié)點數(shù)已經(jīng)保存了該數(shù)據(jù)攻旦。一旦這些節(jié)點保存了該數(shù)據(jù),客戶端將被通知已經(jīng)安全保存了生逸,可以繼續(xù)其他任務(wù)牢屋。而集群中剩余的節(jié)點將會最終也保存了該數(shù)據(jù)。

假設(shè)某個leader假死槽袄,其余的followers選舉出了一個新的leader伟阔。這時,舊的leader復(fù)活并且仍然認(rèn)為自己是leader掰伸,這個時候它向其他followers發(fā)出寫請求也是會被拒絕的皱炉。因為每當(dāng)新leader產(chǎn)生時,會生成一個epoch標(biāo)號(標(biāo)識當(dāng)前屬于那個leader的統(tǒng)治時期)狮鸭,這個epoch是遞增的合搅,followers如果確認(rèn)了新的leader存在,知道其epoch歧蕉,就會拒絕epoch小于現(xiàn)任leader

epoch的所有請求灾部。那有沒有follower不知道新的leader存在呢,有可能惯退,但肯定不是大多數(shù)赌髓,否則新leader無法產(chǎn)生。Zookeeper的寫也遵循quorum機(jī)制,因此锁蠕,得不到大多數(shù)支持的寫是無效的夷野,舊leader即使各種認(rèn)為自己是leader,依然沒有什么作用荣倾。

2悯搔、添加冗余的心跳線,例如雙線條線舌仍,盡量減少“裂腦”發(fā)生機(jī)會妒貌。

3、啟用磁盤鎖铸豁。正在服務(wù)一方鎖住共享磁盤灌曙,"裂腦"發(fā)生時,讓對方完全"搶不走"共享磁盤資源节芥。但使用鎖磁盤也會有一個不小的問題平匈,如果占用共享盤的一方不主動"解鎖",另一方就永遠(yuǎn)得不到共享磁盤〔毓牛現(xiàn)實中假如服務(wù)節(jié)點突然死機(jī)或崩潰增炭,就不可能執(zhí)行解鎖命令。后備節(jié)點也就接管不了共享資源和應(yīng)用服務(wù)拧晕。于是有人在HA中設(shè)計了"智能"鎖隙姿。即正在服務(wù)的一方只在發(fā)現(xiàn)心跳線全部斷開(察覺不到對端)時才啟用磁盤鎖,平時就不上鎖了厂捞。

4输玷、設(shè)置仲裁機(jī)制。例如設(shè)置參考IP(如網(wǎng)關(guān)IP)靡馁,當(dāng)心跳線完全斷開時欲鹏,2個節(jié)點都各自ping一下IP,不通則表明斷點就出在本端臭墨,不僅"心跳"赔嚎、還兼對外"服務(wù)"的本端網(wǎng)絡(luò)鏈路斷了,即使啟動(或繼續(xù))應(yīng)用服務(wù)也沒有用了胧弛,那就主動放棄競爭尤误,讓能夠ping通參考IP的一端去起服務(wù)。更保險一些结缚,ping不通IP的一方干脆就自我重啟损晤,以徹底釋放有可能還占用著的那些共享資源。

綜合分析红竭,無論采取什么樣的方案尤勋,狀態(tài)決策都不可能做到任何場景下都沒有問題喘落,但完全不做高可用方案又會產(chǎn)生更大的問題,如何選取適合系統(tǒng)的高可用方案最冰,也是一個復(fù)雜的分析瘦棋、判斷和選擇的過程。

總之锌奴,上面通過Redis兽狭、Zookeeper為例重點介紹腦裂問題憾股,列舉了一些常用的解決方案鹿蜀,但是針對業(yè)務(wù)系統(tǒng),永遠(yuǎn)都是具體情況具體分析服球,沒有最好茴恰,只有最合適。

最后斩熊,如果我的文章對你有所幫助或者有所啟發(fā)往枣,歡迎關(guān)注公眾號(微信搜索公眾號:首席架構(gòu)師專欄),里面有許多技術(shù)干貨粉渠,也有我對技術(shù)的思考和感悟分冈,還有作為架構(gòu)師的驗驗分享;關(guān)注后回復(fù) 【面試題】霸株,有我準(zhǔn)備的面試題雕沉、架構(gòu)師大型項目實戰(zhàn)視頻等福利 , 小編會帶著你一起學(xué)習(xí)去件、成長坡椒,讓我們一起加油!S攘铩倔叼!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宫莱,隨后出現(xiàn)的幾起案子丈攒,更是在濱河造成了極大的恐慌,老刑警劉巖授霸,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肥印,死亡現(xiàn)場離奇詭異,居然都是意外死亡绝葡,警方通過查閱死者的電腦和手機(jī)深碱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藏畅,“玉大人敷硅,你說我怎么就攤上這事功咒。” “怎么了绞蹦?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵力奋,是天一觀的道長。 經(jīng)常有香客問我幽七,道長景殷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任澡屡,我火速辦了婚禮猿挚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驶鹉。我一直安慰自己绩蜻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布室埋。 她就那樣靜靜地躺著办绝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姚淆。 梳的紋絲不亂的頭發(fā)上孕蝉,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音腌逢,去河邊找鬼降淮。 笑死,一個胖子當(dāng)著我的面吹牛上忍,可吹牛的內(nèi)容都是我干的骤肛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼窍蓝,長吁一口氣:“原來是場噩夢啊……” “哼腋颠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吓笙,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淑玫,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后面睛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體絮蒿,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年叁鉴,在試婚紗的時候發(fā)現(xiàn)自己被綠了土涝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡幌墓,死狀恐怖但壮,靈堂內(nèi)的尸體忽然破棺而出冀泻,到底是詐尸還是另有隱情,我是刑警寧澤蜡饵,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布弹渔,位于F島的核電站,受9級特大地震影響溯祸,放射性物質(zhì)發(fā)生泄漏肢专。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一焦辅、第九天 我趴在偏房一處隱蔽的房頂上張望博杖。 院中可真熱鬧,春花似錦氨鹏、人聲如沸欧募。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至种冬,卻和暖如春镣丑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娱两。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工莺匠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人十兢。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓趣竣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旱物。 傳聞我的和親對象是個殘疾皇子遥缕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容