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