大數據課程涵蓋Java、spark、Hadoop等內容,而不是Java中涵蓋大數據,如今是大數據的時代,學習大數據課程以前必須先了解大數據課程大綱,不然很容易學到假的大數據課程。程序員
今天小編給你們分享一下:ZooKeeper應用--解決分佈式系統單點故障網絡
1.單點故障問題分佈式
什麼是分佈式系統中的單點故障:一般分佈式系統採用主從模式,就是一個主控機鏈接多個處理節點。主節點負責分發任務,從節點負責處理任務,當咱們的主節點發生故障時,那麼整個系統就都癱瘓了,那麼咱們把這種故障叫做單點故障。以下圖oop
傳統方式是採用一個備用節點,這個備用節點按期給當前主節點發送ping包,主節點收到ping包之後向備用節點發送回復Ack,當備用節點收到回覆的時候就會認爲當前主節點還活着,讓他繼續提供服務。以下圖所示:學習
可是這種方式就是有一個隱患,就是網絡問題,來看一網絡問題會形成什麼後果大數據
也就是說咱們的主節點的並無掛,只是在回覆的時候網絡發生故障,這樣咱們的備用節點一樣收不到回覆,就會認爲主節點掛了,而後備用節點將他的Master實例啓動起來,這樣咱們的分佈式系統當中就有了兩個主節點也就是---雙Master, 出現雙Master之後咱們的從節點就會將它所作的事一部分彙報給了主節點,一部分彙報給了備用節點,這樣服務就全亂了。爲了防止出現這種狀況,咱們引入了 ZooKeeper,它雖然不能避免網絡故障,但它可以保證每時每刻只有一個Master。spa
2.ZooKeeper解決方案進程
在引入了Zookeeper之後,咱們啓動了兩個主節點,"主節點-A"和"主節點-B"他們啓動之後,都向ZooKeeper去註冊一個節點。咱們 假設"主節點-A"鎖註冊地節點是"master-00001","主節點-B"註冊的節點是"master-00002",註冊完之後進行選舉,編號最小的節點將在選舉中獲勝得到鎖成爲主節點,也就是咱們的"主節點-A"將會得到鎖成爲主節點,而後"主節點-B"將被阻塞成爲一個備用節點。那麼,經過這 種方式就完成了對兩個Master進程的調度。spark
若是"主節點-A"掛了,這時候他所註冊的節點將被自動刪除,ZooKeeper會自動感知節點的變化,而後再次發出選舉,這時候"主節點-B"將在選舉中獲勝,替代"主節點-A"成爲主節點。ast
3.Master 恢復
若是主節點恢復了,他會再次向ZooKeeper註冊一個節點,這時候他註冊的節點將會是"master-00003",ZooKeeper會感知節點的變化再次發動選舉,這時候"主節點-B"在選舉中會再次獲勝繼續擔任"主節點","主節點-A"會擔任備用節點。
好程序員大數據技術分享