Zookeeper

»Zookeeper Google Chubby一個開源的實現,是Hadoop的分佈式協調服務
»它包含一個簡單的原語集,分佈式應用程序可以基於它實現同步服務,配置維護和命名服務等



爲什麼使用
Zookeeper
»大部分分佈式應用需要一個主控、協調器或控制器來管理物理分佈的子進程(如資源、任務分配等)
»目前,大部分應用需要開發私有的協調程序,缺乏一個通用的機制
»協調程序的反覆編寫浪費,且難以形成通用、伸縮性好的協調器
»ZooKeeper:提供通用的分佈式鎖服務,用以協調分佈式應用

Zookeeper的特性
»Zookeeper是簡單的
»Zookeeper是富有表現力的
»Zookeeper具有高可用性
»Zookeeper採用鬆耦合交互方式
»Zookeeper是一個資源庫

Zookeeper的安裝和配置(單機模式)
»解壓:tar xzfzookeeper-3.4.5.tar.gz
»conf目錄下創建一個配置文件zoo.cfg
dataDir=/usr/local/zk/data
»啓動ZooKeeperServershbin/zkServer.sh start,如果想要關閉,輸入:zkServer.shstop

只運行在一臺服務器上,適合測試環境;Zookeeper 的啓動腳本在bin 目錄下;在啓動腳本之前,還有幾個基本的配置項需要配置一下,tickTime:這個時間是作爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳;dataDir:顧名思義就是 Zookeeper保存數據的目錄,默認情況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏;clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper會監聽這個端口,接受客戶端的訪問請求。當這些配置項配置好後,就可以啓動 Zookeeper 了,啓動後使用命令echo ruok | nclocalhost 2181檢查 Zookeeper是否已經在服務


1.ZooKeeper
    1.1 zk可以用來保證數據在zk集羣之間的數據的事務性一致。
2.如何搭建ZooKeeper服務器集羣
    2.1 zk服務器集羣規模不小於3個節點,要求各服務器之間系統時間要保持一致。
    2.2 在hadoop0的/usr/local目錄下,解壓縮zk....tar.gz,設置環境變量
    2.3 在conf目錄下,修改文件 vi zoo_sample.cfg  zoo.cfg
    2.4 編輯該文件,執行vi zoo.cfg
        修改dataDir=/usr/local/zk/data
        新增server.0=hadoop0:2888:3888
            server.1=hadoop1:2888:3888
            server.2=hadoop2:2888:3888
    2.5 創建文件夾mkdir /usr/local/zk/data
    2.6 在data目錄下,創建文件myid,值爲0
    2.7 把zk目錄複製到hadoop1和hadoop2中
    2.8 把hadoop1中相應的myid的值改爲1
        把hadoop2中相應的myid的值改爲2
    2.9 啓動,在三個節點上分別執行命令zkServer.sh start
    2.10 檢驗,在三個節點上分別執行命令zkServer.sh status


Zookeeper 不僅可以單機提供服務,同時也支持多機組成集羣來提供服務 , 實際上 Zookeeper還支持另外一種僞集羣的方式,也就是可以在一臺物理機上運行多個 Zookeeper 實例nitLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中連接到 Leader Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後Zookeeper 服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒;syncLimit:這個配置項標識 Leader Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime的時間長度,總的時間長度就是 2*2000=4 秒;server.A=BCD:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的ip地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是僞集羣的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。除了修改 zoo.cfg 配置文件,集羣模式下還要配置一個文件 myid,這個文件在dataDir目錄下,這個文件裏面就有一個數據就是 A 的值,Zookeeper 啓動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷到底是那個server分別在3臺機器上啓動ZooKeeper的Server:shbin/zkServer.sh start;運行於一個集羣上,適合生產環境,這個計算機集羣被稱爲一個“集合體”(ensemble)。Zookeeper通過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。爲什麼一定要超過半數呢?這跟Zookeeper的複製策略有關:zookeeper確保對znode樹的每一個修改都會被複制到集合體中超過半數的機器上。


Zookeeper的數據模型
»層次化的目錄結構,命名符合常規文件系統規範
»每個節點在zookeeper中叫做znode,並且其有一個唯一的路徑標識
»節點Znode可以包含數據和子節點,但是EPHEMERAL類型的節點不能有子節點
»Znode中的數據可以有多個版本,比如某一個路徑下存有多個數據版本,那麼查詢這個路徑下的數據就需要帶上版本
»客戶端應用可以在節點上設置監視器
»節點不支持部分讀寫,而是一次性完整讀寫

-znode可以被監控,包括這個目錄節點中存儲的數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,這個功能是zookeeper對於應用最重要的特性,通過這個特性可以實現的功能包括配置的集中管理,集羣管理,分佈式鎖等等。



Zookeeper的節點

»Znode有兩種類型,短暫的(ephemeral)和持久的(persistent
»Znode的類型在創建時確定並且之後不能再修改
»短暫znode的客戶端會話結束時,zookeeper會將該短暫znode刪除,短暫znode不可以有子節點
»持久znode不依賴於客戶端會話,只有當客戶端明確要刪除該持久znode時纔會被刪除
»Znode有四種形式的目錄節點,PERSISTENTPERSISTENT_SEQUENTIALEPHEMERALEPHEMERAL_SEQUENTIAL

-znode可以是臨時節點,一旦創建這個 znode的客戶端與服務器失去聯繫,這個 znode也將自動刪除,Zookeeper的客戶端和服務器通信採用長連接方式,每個客戶端和服務器通過心跳來保持連接,這個連接狀態稱爲 session,如果 znode是臨時節點,這個 session 失效,znode也就刪除了;持久化目錄節點,這個目錄節點存儲的數據不會丟失;順序自動編號的目錄節點,這種目錄節點會根據當前已近存在的節點數自動加1,然後返回給客戶端已經成功創建的目錄節點名;臨時目錄節點,一旦創建這個節點的客戶端與服務器端口也就是 session 超時,這種節點會被自動刪除;臨時自動編號節點

Zookeeper的角色

»領導者(leader),負責進行投票的發起和決議,更新系統狀態
»學習者(learner),包括跟隨者(follower)和觀察者(observer),follower用於接受客戶端請求並想客戶端返回結果,在選主過程中參與投票
»Observer可以接受客戶端連接,將寫請求轉發給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是爲了擴展系統,提高讀取速度
»客戶端(client),請求發起方








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章