久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

首頁開發(fā)教程Apache ZooKeeper安裝配置教程

Apache ZooKeeper安裝配置教程

2025-02-06 193

ZooKeeper作為一款極具特色的分布式應(yīng)用程序協(xié)同服務(wù),發(fā)揮著十分重要的作用。本篇文章圍繞ZooKeeper展開,詳細(xì)介紹了它的安裝配置過程、基本概念、zkCli 的使用方法,并且通過實際操作展示了如何利用 zkCli 來實現(xiàn)一個鎖,希望能夠幫助大家更好地理解和運(yùn)用 ZooKeeper 這項技術(shù)。

一、什么是 ZooKeeper

ZooKeeper 是一款分布式的、開源的分布式應(yīng)用程序協(xié)同服務(wù)。它的設(shè)計初衷非常明確,那就是將那些復(fù)雜且容易出錯的分布式一致性服務(wù)進(jìn)行封裝,進(jìn)而構(gòu)建出一個高效可靠的原語集,并且通過一系列簡單易用的接口提供給用戶使用,大大降低了開發(fā)人員在處理分布式協(xié)同問題時的難度。

二、ZooKeeper發(fā)展歷史

ZooKeeper 最早誕生于雅虎研究院的一個研究小組。當(dāng)時,研究人員在雅虎內(nèi)部的諸多大型系統(tǒng)中發(fā)現(xiàn)了一個共性問題,即很多系統(tǒng)都需要依賴類似的系統(tǒng)來完成分布式協(xié)同工作,然而這些系統(tǒng)普遍存在著分布式單點問題,這無疑給系統(tǒng)的穩(wěn)定性和可靠性帶來了隱患。

于是,雅虎的開發(fā)人員著手開發(fā)了一個通用的、不存在單點問題的分布式協(xié)調(diào)框架,這便是 ZooKeeper。后來,ZooKeeper 在開源界得到了大量應(yīng)用,以下為大家列舉 3 個著名開源項目對 ZooKeeper 的應(yīng)用情況:

1、Hadoop:借助 ZooKeeper 實現(xiàn) Namenode 的高可用,確保整個系統(tǒng)在關(guān)鍵節(jié)點方面的穩(wěn)定性和容錯能力。

2、HBase:利用 ZooKeeper 保證集群中只有一個 master,同時保存 hbase:meta 表的位置以及集群中的 RegionServer 列表,以此來維持集群的有序運(yùn)行。

3、Kafka:通過 ZooKeeper 進(jìn)行集群成員管理以及 controller 節(jié)點選舉,保障集群在動態(tài)變化過程中的協(xié)調(diào)一致。

三、ZooKeeper應(yīng)用場景

在分布式協(xié)調(diào)服務(wù)領(lǐng)域,ZooKeeper 有著廣泛的用武之地,諸多場景都可以借助它來實現(xiàn)高效的協(xié)調(diào),下面為大家介紹幾個典型應(yīng)用場景:

1、配置管理(configuration management):在普通的 Java 應(yīng)用中,配置項通常只是一個本地的配置文件即可滿足需求。但若是微服務(wù)系統(tǒng),各個獨(dú)立的服務(wù)就需要采用集中化的配置管理方式,這時 ZooKeeper 就能派上用場了,它可以很好地協(xié)調(diào)各服務(wù)間的配置信息。

2、DNS 服務(wù):在網(wǎng)絡(luò)環(huán)境中,ZooKeeper 也能在 DNS 服務(wù)相關(guān)方面發(fā)揮獨(dú)特作用,助力域名解析等工作更加順暢地進(jìn)行。

3、組成員管理(group membership):就像前面提到的 HBase 利用 ZooKeeper 進(jìn)行集群的組成員管理一樣,ZooKeeper 能夠清晰地掌控成員的狀態(tài)和信息,確保集群成員間的協(xié)調(diào)運(yùn)作。

4、各種分布式鎖:在需要實現(xiàn)分布式鎖的場景中,ZooKeeper 也是一個得力的工具。
不過需要注意的是,ZooKeeper 更適用于存儲和協(xié)同相關(guān)的關(guān)鍵數(shù)據(jù),并不適合用于大數(shù)據(jù)量存儲。這是為什么呢?主要有以下兩方面原因:

5、設(shè)計方面:ZooKeeper 需要將所有的數(shù)據(jù)(也就是它的 data tree)加載到內(nèi)存當(dāng)中,這就使得它所能存儲的數(shù)據(jù)量受到內(nèi)存大小的限制。在這一點上,它和 Redis 比較相似。而一般的數(shù)據(jù)庫系統(tǒng),例如使用 InnoDB 存儲引擎的 MySQL,由于 InnoDB 是基于 B-Tree 的存儲引擎,B-tree 存儲引擎以及 LSM 存儲引擎都能夠存儲大于內(nèi)存的數(shù)據(jù)量,所以在大數(shù)據(jù)存儲方面更具優(yōu)勢。

6、工程方面:ZooKeeper 的設(shè)計目標(biāo)主要是為協(xié)同服務(wù)提供數(shù)據(jù)存儲,數(shù)據(jù)的高可用性和性能才是其最為看重的系統(tǒng)指標(biāo),處理大數(shù)據(jù)量并非它的首要目標(biāo)。因此,ZooKeeper 在工程層面不會針對大數(shù)據(jù)量存儲做過多的優(yōu)化處理。

四、ZooKeeper服務(wù)的使用

若要使用 ZooKeeper 服務(wù),首先我們的應(yīng)用需要引入 ZooKeeper 的客戶端庫,之后通過客戶端庫與 ZooKeeper 集群進(jìn)行網(wǎng)絡(luò)通信,以此來使用 ZooKeeper 所提供的服務(wù)。從本質(zhì)上來說,這屬于 Client-Server 的架構(gòu),我們的應(yīng)用扮演著客戶端的角色,去調(diào)用 ZooKeeper Server 端提供的服務(wù)。

Apache ZooKeeper安裝配置教程

五、ZooKeeper數(shù)據(jù)模型

Apache ZooKeeper安裝配置教程

ZooKeeper的數(shù)據(jù)模型是層次模型,這種模型在文件系統(tǒng)中較為常見。層次模型和 key-value 模型是當(dāng)下兩種主流的數(shù)據(jù)模型。ZooKeeper 之所以采用文件系統(tǒng)模型,主要基于以下兩點考慮:

  • 文件系統(tǒng)的樹形結(jié)構(gòu)便于清晰地表達(dá)數(shù)據(jù)之間的層次關(guān)系,使得數(shù)據(jù)的組織和管理更加有條理;
  • 文件系統(tǒng)的樹形結(jié)構(gòu)能夠方便地為不同的應(yīng)用分配獨(dú)立的命名空間(namespace),確保各個應(yīng)用的數(shù)據(jù)互不干擾。

ZooKeeper的層次模型被稱作 data tree,data tree 的每個節(jié)點叫做 znode。與普通文件系統(tǒng)不同的是,ZooKeeper 中的每個節(jié)點都可以保存數(shù)據(jù),并且每個節(jié)點都擁有一個版本(version),版本計數(shù)從 0 開始。

例如在如上圖所示的 data tree 中包含兩個子樹,一個用于應(yīng)用 1(/app1),另一個用于應(yīng)用 2(/app2)。應(yīng)用 1 的子樹實現(xiàn)了一個簡單的組成員協(xié)議:每個客戶端進(jìn)程 pi 創(chuàng)建一個 znode p_i 在 /app1 下,只要 /app1/p_i 存在,就代表進(jìn)程 pi 處于正常運(yùn)行狀態(tài)。

1、data tree接口

ZooKeeper 對外提供了一個用來訪問 data tree 的簡化文件系統(tǒng) API,具有以下特點:

  • 使用 UNIX 風(fēng)格的路徑名來定位 znode,例如 /A/X 表示 znode A 的子節(jié)點 X,這種方式簡單直觀,易于理解和操作;
  • znode 的數(shù)據(jù)只支持全量寫入和讀取,并不像通用文件系統(tǒng)那樣支持部分寫入和讀取,這是由其自身設(shè)計和應(yīng)用場景所決定的;
  • data tree 的所有 API 都是 wait-free 的,也就是說正在執(zhí)行中的 API 調(diào)用不會對其他 API 的完成產(chǎn)生影響,保證了操作的獨(dú)立性和高效性;
  • data tree 的 API 都是對文件系統(tǒng)的 wait-free 操作,雖然不直接提供鎖這樣的分布式協(xié)同機(jī)制,但其功能非常強(qiáng)大,可以用來實現(xiàn)多種分布式協(xié)同機(jī)制。

2、znode分類

一個 znode 可以分為不同的類型,具體可以是持久性的,也可以是臨時性的,同時 znode 節(jié)點還可以具備順序性。每一個順序性的 znode 都會關(guān)聯(lián)一個唯一的單調(diào)遞增整數(shù)。因此,ZooKeeper 主要有以下 4 種 znode:

  • 持久性的 znode (PERSISTENT):無論 ZooKeeper 出現(xiàn)宕機(jī)情況,還是 client 宕機(jī),只要這個 znode 一旦創(chuàng)建,就不會丟失,能夠保證數(shù)據(jù)的持久存儲;
  • 臨時性的 znode (EPHEMERAL):當(dāng) ZooKeeper 宕機(jī)了,或者 client 在指定的 timeout 時間內(nèi)沒有連接 server,該 znode 都會被認(rèn)為丟失,這種特性適用于一些需要動態(tài)感知客戶端狀態(tài)的場景;
  • 持久順序性的 znode (PERSISTENT_SEQUENTIAL):這類 znode 除了具備持久性 znode 的特點之外,其名字還具備順序性;
  • 臨時順序性的 znode (EPHEMERAL_SEQUENTIAL):它除了具備臨時性 znode 的特點之外,名字同樣具備順序性,結(jié)合了臨時和順序兩種特性,可滿足更多復(fù)雜場景的需求。

六、安裝ZooKeeper

首先,我們需要到 https://archive.apache.org/dist/zookeeper/stable/ 這個網(wǎng)址去下載 ZooKeeper,截至目前,它的最新版本是 3.5.6。

Apache ZooKeeper安裝配置教程

下載完成后,把 apache-zookeeper-3.5.6-bin.tar.gz 解壓到一個本地目錄(需要注意的是,目錄名最好不要包含空格和中文,這里我使用 /usr/local 目錄),解壓命令如下:

tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz

接著把 conf 目錄下的 zoo_sample.cfg 重命名為 zoo.cfg,然后對相關(guān)配置進(jìn)行修改。

Apache ZooKeeper安裝配置教程

配置以下環(huán)境變量,可以通過 vim /etc/profile 命令來操作:

Apache ZooKeeper安裝配置教程

七、啟動Zookeeper

在完成安裝和配置之后,就可以啟動 Zookeeper 了,使用 zkServer.sh start 命令來啟動 ZooKeeper 服務(wù)。

Apache ZooKeeper安裝配置教程

啟動之后,我們需要做一些檢查工作:

Apache ZooKeeper安裝配置教程

  • 檢查 ZooKeeper 日志是否有出錯信息:如果沒有返回結(jié)果,那就說明暫時沒有錯誤信息,系統(tǒng)啟動正常。
  • 檢查 ZooKeeper 數(shù)據(jù)文件:這里存放著 ZooKeeper 的事務(wù)日志文件和快照日志文件,由于現(xiàn)在還沒有運(yùn)行任何 ZooKeeper 命令,所以可能暫時還沒有事務(wù)日志文件。

Apache ZooKeeper安裝配置教程

檢查 ZooKeeper 是否在 2181 端口上監(jiān)聽:通過執(zhí)行 netstat -an | ag 2181 命令,如果看到 ZooKeeper 已經(jīng)在 2181 這個端口上監(jiān)聽了,那就說明啟動成功。

下面來演示一下如何使用 zkCli:

1、zkCli使用

在執(zhí)行 zkCli.sh 命令后,會出現(xiàn)很多消息,這些消息表明我們的 zkCli 和 ZooKeeper 的節(jié)點成功建立了有效連接。可以使用 ls -R / 命令來遞歸查找 ZooKeeper 的 znode 節(jié)點,使用 create /znode_name 命令來創(chuàng)建 znode 節(jié)點,具體演示如下:

Apache ZooKeeper安裝配置教程

2、用zkCli實現(xiàn)鎖

分布式鎖要求當(dāng)鎖的持有者出現(xiàn)宕機(jī)情況時,鎖能夠被自動釋放。而 ZooKeeper 的 ephemeral 節(jié)點恰好具備這樣的特性,接下來我們通過實際操作來演示一下。

需要在兩個終端上分別啟動 zkCli,具體操作如下:

(1)在終端 1 上:

執(zhí)行 zkCli.sh,再執(zhí)行 create -e /lock 命令,以此來建立臨時 znode,實際上加鎖的操作就是建立 znode 的過程,此時第一個客戶端加鎖成功。

(2)接下來在第二個客戶端嘗試加鎖,在終端 2 上:

執(zhí)行 zkCli.sh,再執(zhí)行 create -e /lock 命令,這時會發(fā)現(xiàn)提示 Node already exists: /lock,表明 znode 已存在,znode 建立失敗,也就意味著加鎖失敗。此時我們來監(jiān)控這個 znode,通過執(zhí)行 stat -w /lock 命令來等待鎖被釋放。

當(dāng)我們在終端 1 上執(zhí)行 quit 命令退出第一個客戶端時,在客戶端 2 上會收到一條 WATCHER 信息,具體如下:

Apache ZooKeeper安裝配置教程

在收到這個事件后,再次在客戶端 2 上執(zhí)行加鎖操作,即執(zhí)行 create -e /lock,會顯示創(chuàng)建 znode 成功,也就是加鎖成功。

  • 廣告合作

  • QQ群號:4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請注明出處“站長百科”和原文地址。

相關(guān)文章