ZooKeeper應(yīng)用——解決分布式系統(tǒng)單點(diǎn)故障

1.單點(diǎn)故障問題

什么是分布式系統(tǒng)中的單點(diǎn)故障:通常分布式系統(tǒng)采用主從模式,就是一個主控機(jī)連接多個處理節(jié)點(diǎn)。主節(jié)點(diǎn)負(fù)責(zé)分發(fā)任務(wù),從節(jié)點(diǎn)負(fù)責(zé)處理任務(wù),當(dāng)我們的主節(jié)點(diǎn)發(fā)生故障時,那么整個系統(tǒng)就都癱瘓了,那么我們把這種故障叫作單點(diǎn)故障。

傳統(tǒng)方式是采用一個備用節(jié)點(diǎn),這個備用節(jié)點(diǎn)定期給當(dāng)前主節(jié)點(diǎn)發(fā)送ping包,主節(jié)點(diǎn)收到ping包以后向備用節(jié)點(diǎn)發(fā)送回復(fù)Ack?,當(dāng)備用節(jié)點(diǎn)收到回復(fù)的時候就會認(rèn)為當(dāng)前主節(jié)點(diǎn)還活著,讓他繼續(xù)提供服務(wù)。如下圖所示:

但是這種方式就是有一個隱患,就是網(wǎng)絡(luò)問題,來看一網(wǎng)絡(luò)問題會造成什么后果。

也就是說?我們的主節(jié)點(diǎn)的并沒有掛,只是?在回復(fù)的時候網(wǎng)絡(luò)發(fā)生故障,這樣我們的備用節(jié)點(diǎn)同樣收不到回復(fù),就會認(rèn)為主節(jié)點(diǎn)掛了?,?然后備用節(jié)點(diǎn)將他的Master實(shí)例啟動起來,這樣我們的分布式系統(tǒng)當(dāng)中就有了兩個主節(jié)點(diǎn)也就是---雙Master?, 出現(xiàn)雙Master以后我們的從節(jié)點(diǎn)就會將它所做的事一部分匯報給了主節(jié)點(diǎn),一部分匯報給了備用節(jié)點(diǎn),這樣服務(wù)就全亂了。?為了防止出現(xiàn)這種情況,我們引入了 ZooKeeper,它雖然不能避免網(wǎng)絡(luò)故障,但它能夠保證每時每刻只有一個Master。

2.ZooKeeper解決方案

在引入了Zookeeper以后,我們啟動了兩個主節(jié)點(diǎn),?"主節(jié)點(diǎn)-A"和"主節(jié)點(diǎn)-B"他們啟動以后,都向ZooKeeper去注冊一個節(jié)點(diǎn)?。?我們 假設(shè)"主節(jié)點(diǎn)-A"鎖注冊地節(jié)點(diǎn)是"master-00001","主節(jié)點(diǎn)-B"注冊的節(jié)點(diǎn)是"master-00002",?注冊完以后進(jìn)行選舉,編號最小的節(jié)點(diǎn)將在選舉中獲勝獲得鎖成為主節(jié)點(diǎn)?,也就是我們的"主節(jié)點(diǎn)-A"將會獲得鎖成為主節(jié)點(diǎn),然后"主節(jié)點(diǎn)-B"將被阻塞成為一個備用節(jié)點(diǎn)。那么,用這種方式就完成了對兩個Master進(jìn)程的調(diào)度。

如果"主節(jié)點(diǎn)-A"掛了,這時候他所注冊的節(jié)點(diǎn)將被自動刪除,?ZooKeeper會自動感知節(jié)點(diǎn)的變化,然后再次發(fā)出選舉,這時候"主節(jié)點(diǎn)-B"將在選舉中獲勝,替代"主節(jié)點(diǎn)-A"成為主節(jié)點(diǎn)。

3.Master 恢復(fù)

如果主節(jié)點(diǎn)恢復(fù)了,他會再次向ZooKeeper注冊一個節(jié)點(diǎn),這時候他注冊的節(jié)點(diǎn)將會是?"master-00003"?,?ZooKeeper會感知節(jié)點(diǎn)的變化再次發(fā)動選舉?,這時候"主節(jié)點(diǎn)-B"在選舉中會再次獲勝繼續(xù)擔(dān)任"主節(jié)點(diǎn)","主節(jié)點(diǎn)-A"會擔(dān)任備用節(jié)點(diǎn)。

歡迎工作一到五年的Java工程師朋友們加入Java架構(gòu)開發(fā): 855835163

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時間來學(xué)習(xí)提升自己,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ZooKeeper概述 在Zookeeper的官網(wǎng)上有這么一句話:ZooKeeper is a centraliz...
    什么也不懂888閱讀 375評論 0 2
  • 一個真正的寫數(shù)據(jù)流程是怎么樣的?一個真正的讀數(shù)據(jù)流程是怎么樣的?一個真正的同步數(shù)據(jù)流程是怎么樣的?從哪里到哪里?什...
    時待吾閱讀 4,313評論 0 14
  • 轉(zhuǎn)自 Zookeeper 一、分布式協(xié)調(diào)技術(shù) 在給大家介紹ZooKeeper之前先來給大家介紹一種技術(shù)——分布式協(xié)...
    呂品?閱讀 258評論 0 1
  • 今年工作到現(xiàn)在,終于有機(jī)會回家一次了。 在初出項(xiàng)目部之前,還忙著工作,本來準(zhǔn)備2點(diǎn)半去高鐵站,走之前想到一個事情,...
    不二蘭蘭閱讀 413評論 1 4
  • 薛之謙的《你還要我怎樣》中有一句歌詞被很多人喜歡,“至少分開的時候我落落大方”。 我不知道有多少人在愛情走到盡...
    林牧君閱讀 488評論 1 0

友情鏈接更多精彩內(nèi)容