Hadoop(6)--zookeeper

Zookeeper
每一個專業的技術總可以在生活中找到相應的實例,就比如說zookeeper,攘其外必先安其內就很好的解釋了zookeeper,Hadoop集羣的組件中的很多在學習的時候都會覺得每一個都不穩定,都會出現這樣那樣的問題,會常常聽到的一個詞語就是高可用,在zookeeper的官方定義的時候在集羣出現故障到解決故障正常執行的間隔時間小於200ms,在我們看來就是整個集羣一直可用的錯覺
我們以HDFS爲例子先解釋一下zookeeper,在開機時,兩個namenode只有一個處於存活狀態,每一個namenode伴隨着有一個zkfc存在,zkfc一邊連接namenode,另一邊是zookeeper集羣,當開機後,zkfc會爭先去zookeeper中創建一個節點,誰先創建就可以啓動並創建一個節點進行監控、註冊等,節點的變化會產生一個事件,當一個namenode出現異常掛掉之後會產生一個事件,事件會向節點去註冊,然後節點會回調存活的namenode並啓動,掛掉的namenode處於等待狀態,所以說zookeeper就是一個協調服務
Zookeeper的構成

領導者(leader) 進行投票的發起和決議,更新系統狀態
學習者
(leaener) 跟隨者
(follower) 接受客戶端的請求並返回結果,選舉過程中參與投票
觀察者
(observer) 接收客戶端的連接,將寫請求轉發給leader節點,不參與投票,只同步leader的狀態
客戶端(Client) 請求發起方
Leader主要有三個功能:
1 .恢復數據;
2 .維持與Learner的心跳,接收Learner請求並判斷Learner的請求消息類型;
3 .Learner的消息類型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根據不同的消息類型,進行不同的處理。
Observer的目的是爲了擴展系統,提高讀取速度
Follower主要有四個功能:

  1. 向Leader發送請求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);
    2 .接收Leader消息並進行處理;
    3 .接收Client的請求,如果爲寫請求,發送給Leader進行投票;
    4 .返回Client結果。
    Zookeeper 的特性:
    單一視圖 爲客戶展現同一個視圖,即使因爲掛機或者其他原因造成版本低等現象,但是當重新連接之後數據版本等信息會進行更新,最終達到一致性的特點
    可靠性 如果消息被一臺服務器接受,那麼它將被所有的服務器接收
    實時性 不能保證兩個客戶端同時得到剛更新的數據
    獨立性 各個Client之間互不干預
    原子性 更新只能成功或者失敗,沒有中間狀態
    順序性 所有Server,同一消息發佈順序一致
    Zookeeper的基本運行流程:
    Hadoop(6)--zookeeper

Client將一條請求寫入到zookeeper集羣中
Follower將請求轉發給leader,然後leader將請求轉發給集羣中的節點,投票表決
因爲zookeeper集羣的原子性,所以會有兩個過程,首先投票表決是否可以進行這個請求操作,如果過半的節點同意進行這個請求,那麼,進行下一步,將請求發送到各個節點上進行處理,這也就保證了只會有成功和失敗兩種狀態,不會出現中間狀態
當過半的節點(不同意的節點可能因爲掛機或者其他原因失去聯繫)同意並且執行完畢之後,zookeeper會恢復所有的節點之間的通信,這個時候會將數據進行同步處理,達到整個集羣中的數據的一致性
Zookeeper的核心是原子廣播,(但client發送請求將hello寫入到集羣中時,節點會投票選擇是否同意這個請求,當同意之後,leader會將hello更新到所有的節點上),保證了各個server之間的同步,實現協議是zab協議
Zab協議包括
恢復模式:leader掛掉了,需要重新選舉leader或者當服務剛剛啓動還沒有產生leader的時候
廣播模式:產生leader之後,集羣處於主從結構之後的模式
而對於爲產生leader之前的恢復模式,他在選舉leader的時候有一套他自己的算法機制
Zookeeper內部選舉算法:
當客戶端提交請求之後 或者當集羣剛啓動的時候,zookeeper會進行投票的行爲,投票選舉出來在大家之中最適合成爲領導者的那個節點,讓他領導其餘的節點,投票不是一輪既可以完成的,因爲總有得票數相同的節點出現,素以需要進行多輪投票,直到選出那唯一的一個,,在每一輪投票結束之後會將投票信息發送到所有的節點上,這些信息包括:服務器ID,數據ID,邏輯時鐘,選舉狀態(LOOKING,競選狀態。 FOLLOWING,隨從狀態,同步leader狀態,參與投票。OBSERVING,觀察狀態,同步leader狀態,不參與投票。LEADING,領導者狀態)在每一輪的投票中不斷的更新這些數據,最後可以得到一個的票數最多的節點,他就是衆望所歸的leader
Hadoop(6)--zookeeper
具體的投票執行流程:
(1) 變更狀態。Leader掛後,餘下的非Observer服務器都會講自己的服務器狀態變更爲LOOKING,然後開始進入Leader選舉過程。
  (2) 每個Server會發出一個投票。在運行期間,每個服務器上的ZXID可能不同,此時假定Server1的ZXID爲3,Server3的ZXID爲2;在第一輪投票中,Server1和Server3都會投自己,產生投票(1, 123),(3, 122),然後各自將投票發送給集羣中所有機器。
  (3) 接收來自各個服務器的投票。與啓動時過程相同。
  (4) 處理投票。與啓動時過程相同,此時,Server1將會成爲Leader。
  (5) 統計投票。與啓動時過程相同。
  (6) 改變服務器的狀態。與啓動時過程相同

如想跟好的交流,請添加qq羣:859121793
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章