Zookeeper入门总结
什么是Zookeeper
官方定義:
zookeeper是一個分布式服務框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。
可以簡單理解為 Zookeeper = 文件系統 + 監聽通知機制
Zookeeper的特性
注:以下server指Zookeeper的單個服務節點,client指Zookeeper的客戶端
ZooKeeper的特性和功能是實現諸如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等服務的基礎
文件系統
Zookeeper維護一個類似文件系統的數據結構:
ZooKeeper節點(如上圖中/NameServer)稱為 znode 。每個znode由一個名稱標識,并用路徑(/)序列分隔
znode由三部分組成:
- stat:此為狀態信息,描述該Znode版本、權限等信息。
- data:與該Znode關聯的數據
- children:該Znode下的節點
我們能夠自由地增加、刪除znode,在一個znode下增加、刪除子znode,并且可以在znode中存儲數據
Zone節點的類型
- 持久節點:即使在創建該特定znode的客戶端斷開連接后,持久節點仍然存在。默認情況下,除非另有說明,否則所有znode都是持久的。
- 臨時節點 - 客戶端活躍時,臨時節點就是有效的。當客戶端與ZooKeeper集合斷開連接時,臨時節點會自動刪除。因此,只有臨時節點不允許有子節點。如果臨時節點被刪除,則下一個合適的節點將填充其位置。臨時節點在leader選舉中起著重要作用。
- 順序節點 - 順序節點可以是持久的或臨時的。當一個新的znode被創建為一個順序節點時,ZooKeeper通過將10位的序列號附加到原始名稱來設置znode的路徑。例如,如果將具有路徑 /myapp 的znode創建為順序節點,則ZooKeeper會將路徑更改為 /myapp0000000001 ,并將下一個序列號設置為0000000002。如果兩個順序節點是同時創建的,那么ZooKeeper不會對每個znode使用相同的數字。順序節點在鎖定和同步中起重要作用。
監聽機制
客戶端通過Zookeeper提供的API注冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,zookeeper會通知客戶端。
ZooKeeper應用場景
依據ZooKeeper全局數據一致、數據更新原子性、實時性等特性及其監聽機制,可以用于實現分布式鎖、統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。
分布式應用配置管理
假設我們的程序是分布式部署在多臺機器上,如果我們要改變程序的配置文件,需要逐臺機器去修改,非常麻煩,現在把這些配置全部放到zookeeper上去,保存在 zookeeper 的某個目錄節點中,然后所有相關應用程序對這個目錄節點進行監聽,一旦配置信息發生變化,每個應用程序就會收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應用到系統中。
分布式鎖
- 在 ZooKeeper 指定節點(locker)下創建臨時順序節點 node_n
- 獲取 locker 下所有子節點 children
- 對子節點按節點自增序號從小到大排序
- 判斷本節點是不是第一個子節點,若是,則獲取鎖;若不是,則等待
- 使用 ZooKeeper 感知節點的功能,對本節點的上一個節點進行感知
- 當上一個節點被刪除了,ZooKeeper 會通知該線程,該線程就結束等待,并獲取鎖
- 釋放鎖,并刪除該臨時節點
詳細分布式鎖實現可以參考菜鳥教程:Zookeeper 分布式鎖實現原理
Zookeeper安裝
參考:W3Cschool:Zookeeper安裝步驟
參考
- Zookeeper入門看這篇就夠了
- Zookeeper 概述
總結
以上是生活随笔為你收集整理的Zookeeper入门总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: important的反义词 import
- 下一篇: 微信怎么指定给10个人发红包