zookeeper簡單介紹

詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt193node

ZooKeeper是Hadoop的正式子項目,它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。web

Zookeeper是Google的Chubby一個開源的實現.是高有效和可靠的協同工做系統.Zookeeper可以用來leader選舉,配置信息維護等.在一個分佈式的環境中,咱們須要一個Master實例或存儲一些配置信息,確保文件寫入的一致性等.Zookeeper可以保證以下3點:服務器

  • Watches are ordered with respect to other events, other watches, and
    asynchronous replies. The ZooKeeper client libraries ensures that
    everything is dispatched in order.網絡

  • A client will see a watch event for a znode it is watching before seeing the new data that corresponds to that znode.async

  • The order of watch events from ZooKeeper corresponds to the order of the updates as seen by the ZooKeeper service.分佈式

 

在Zookeeper中,znode是一個跟Unix文件系統路徑類似的節點,能夠往這個節點存儲或獲取數據.若是在建立znode時Flag設置 爲EPHEMERAL,那麼當這個建立這個znode的節點和Zookeeper失去鏈接後,這個znode將再也不存在在Zookeeper 裏.Zookeeper使用Watcher察覺事件信息,當客戶端接收到事件信息,好比鏈接超時,節點數據改變,子節點改變,能夠調用相應的行爲來處理數 據.Zookeeper的Wiki頁面展現瞭如何使用Zookeeper來處理事件通知,隊列,優先隊列,鎖,共享鎖,可撤銷的共享鎖,兩階段提交.oop

那麼Zookeeper能幫咱們做什麼事情呢?簡單的例子:假設咱們咱們有個20個搜索引擎的服務器(每一個負責總索引中的一部分的搜索任務)和一個 總服務器(負責向這20個搜索引擎的服務器發出搜索請求併合並結果集),一個備用的總服務器(負責當總服務器宕機時替換總服務器),一個web的 cgi(向總服務器發出搜索請求).搜索引擎的服務器中的15個服務器如今提供搜索服務,5個服務器正在生成索引.這20個搜索引擎的服務器常常要讓正在 提供搜索服務的服務器中止提供服務開始生成索引,或生成索引的服務器已經把索引生成完成能夠搜索提供服務了.使用Zookeeper能夠保證總服務器自動 感知有多少提供搜索引擎的服務器並向這些服務器發出搜索請求,備用的總服務器宕機時自動啓用備用的總服務器,web的cgi可以自動地獲知總服務器的網絡 地址變化.這些又如何作到呢?性能

  1.  提供搜索引擎的服務器都在Zookeeper中建立znode,zk.create("/search/nodes/node1",
    "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);搜索引擎

  2. 總服務器能夠從Zookeeper中獲取一個znode的子節點的列表,zk.getChildren("/search/nodes", true);spa

  3. 總服務器遍歷這些子節點,並獲取子節點的數據生成提供搜索引擎的服務器列表.

  4. 當總服務器接收到子節點改變的事件信息,從新返回第二步.

  5. 總服務器在Zookeeper中建立節點,zk.create("/search/master", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);

  6. 備用的總服務器監控Zookeeper中的"/search/master"節點.當這個znode的節點數據改變時,把本身啓動變成總服務器,並把本身的網絡地址數據放進這個節點.

  7. web的cgi從Zookeeper中"/search/master"節點獲取總服務器的網絡地址數據並向其發送搜索請求.

  8. web的cgi監控Zookeeper中的"/search/master"節點,當這個znode的節點數據改變時,從這個節點獲取總服務器的網絡地址數據,並改變當前的總服務器的網絡地址.

 

相關文章
相關標籤/搜索