Zookeeper的概念以及搭建
zookeeper官網:
什麼是Zookeeper ?
Zookeeper是Google的chubby一個開源的實現,是hadoop的分散式協調服務。
它包含一個簡單的原語集,分散式應用程式可以基於它實現同步服務,配置維護和命名服務等。
zookeeper首先是一個叢集,它成立的意義主要為其他分散式應用提供底層的協調服務,它自己也是個叢集。
還沒有zookeeper的時候
leader:是個主節點,所有資料的寫操作都是由leader來實現的,leader把資料更新了,然後再去通知Server去更新資料,而且leader會覺得,如果這裡面有超過一半資料更新成功了,那麼資料就是更新成功了。
它還有一個特點,leader與Server不是在叢集啟動之前決定誰是leader,誰是follower的,它沒有事先去分配的,那麼怎麼決定?–-選舉
啟動的時候,大家的地位是同等的,大家都是普通的ZookeeperServer ,但是在啟動的過程中,他們會通過一個特定的選舉機制,去進行投票,誰來當選為leader,一旦選舉出leader,那麼其他的就是follwer,
為什麼使用Zookeeper?
1.大部分分散式應用需要一個主控(如果是寫死,一旦當即宕機就不能用了)、協調器或者控制器來管理物理分佈的子程序(如資源、任務分配等) 2.目前,大部分應用需要開發私有的協調程式,缺乏一個通用的機制 3.協調程式的反覆編寫浪費,且難以形成通用 、伸縮性好的協調器 4.Zookeeper:提供通用的分散式鎖服務,用以協調分散式應用。
zookeeper的安裝和配置
1.建立myid檔案, server1的內容為1 server2的內容為2 server3的內容為3 2.在conf目錄下建立一個配置檔案zoo.cfg 1)dataDir=寫的是在本地的工作目錄,因為要存資料 2)clientPort=2181 客戶端去連線這個叢集的時候,要連線的埠 3)initLimit=5 4)syncLimit=2 5)指定zookeeper叢集 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888
配置完成後 用scp命令將解壓的東西傳送到各個zookeeper叢集
下面這個就是zookeeper的程序:
可以通過命令列的客戶端訪問叢集:zkCli.sh,用它可以連線到叢集上面去,訪問裡面的資料。 這樣就連線到本節點的2181上面去了。 在本節點上寫任意一個數據,在其他兩臺上都能看得到
zookeeper對資料的管理:它是採用什麼格式來管理資料呢?
它把資料像檔案一樣的管理起來,類似於檔案樹的結構,檔案樹有一個根節點,叫作資料節點,樹上的每一個節點叫作一個node ,你的客戶端程式可以在這個 根下建立一個數據節點。
比如說你有一個分散式應用叫訂單什麼分析的 那麼這個地方可能需要做一些分散式協調,建一個: /order-analyze/:你的 分散式應用裡面的每一個其他節點可以在這個節點下建子節點,每一個節點也可以 儲存你的一部分資料,資料最好是小於1M----存放的是資訊資料 那麼這個節點的子節點也可以存放自己資訊的一些資料—就是你要儲存的資料–也最好小於1 M.
寫資料:
你可以在hadoop2下面修改值,然後在hadoop3下面查,你會發現這資料同步用不到兩秒鐘,兩秒只是節點和節點之間一種狀態的感知,
zookeeper叢集最後要想維持正常工作,要存活的節點數量大於叢集配置數量的一半,才能夠正常存活,因為它的選舉機制,即多數票得票者稱為leader,至少得兩票,只剩下一臺就不行
zookeeper的節點:
Znode有兩種型別,短暫的(cphemeral)和持久的(persistent) 短暫的Znode的客戶端會話結束 時,zookeeper會將該短暫的Znode刪除,短暫的不可以有子節點
持久的Znode不依賴於客戶端會話,只有客戶端明確要刪除該持久Znode時,才會被刪除
Znode 有四種形式的目錄節點: PERSISTENT、 PERSISTENT_SEQUENTIAL、 EPHEMERAL、 EPHEMERAL_SEQUENTIAL
Zookeeper的角色
領導者(leader): 負責進行投票的發起和決議,更新系統狀態 學習者(learner):包括跟隨者(follower)和觀察者(observer),follower用於接受客戶端請求並向客戶端返回結果,在選主過程中參與投票 Observer可以接受使用者客戶端連線,將寫請求轉發給leader,但是Observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴充套件系統,提高讀取速度。 客戶端(client):請求發起者