溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ZooKeeper集群如何安裝、配置

發(fā)布時間:2021-11-16 10:51:05 來源:億速云 閱讀:160 作者:小新 欄目:云計算

這篇文章主要介紹ZooKeeper集群如何安裝、配置 ,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

一. ZooKeeper介紹

ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護、命名服務(wù)、分布式同步、組服務(wù)等

二. ZooKeeper的使用場景

  1. 數(shù)據(jù)發(fā)布與訂閱(配置中心)

    發(fā)布與訂閱模型,即所謂的配置中心,顧名思義就是發(fā)布者將數(shù)據(jù)發(fā)布到ZK節(jié)點上,供訂閱者動態(tài)獲取數(shù)據(jù),實現(xiàn)配置信息的集中式管理和動態(tài)更新。例如全局的配置信息,服務(wù)式服務(wù)框架的服務(wù)地址列表等就非常適合使用。

注意:在上面提到的應(yīng)用場景中,有個默認(rèn)前提是:數(shù)據(jù)量很小,但是數(shù)據(jù)更新可能會比較快的場景。

  1. 負(fù)載均衡

    這里說的負(fù)載均衡是指軟負(fù)載均衡。在分布式環(huán)境中,為了保證高可用性,通常同一個應(yīng)用或同一個服務(wù)的提供方都會部署多份,達到對等服務(wù)。而消費者就須要在這些對等的服務(wù)器中選擇一個來執(zhí)行相關(guān)的業(yè)務(wù)邏輯,其中比較典型的是消息中間件中的生產(chǎn)者,消費者負(fù)載均衡。

    在某個消費者故障或者重啟等情況下,其他消費者會感知到這一變化(通過 zookeeper watch消費者列表),然后重新進行負(fù)載均衡,保證所有的分區(qū)都有消費者進行消費。

  2. 命名服務(wù)(Naming Service)

    命名服務(wù)也是分布式系統(tǒng)中比較常見的一類場景。在分布式系統(tǒng)中,通過使用命名服務(wù),客戶端應(yīng)用能夠根據(jù)指定名字來獲取資源或服務(wù)的地址,提供者等信息。被命名的實體通??梢允羌褐械臋C器,提供的服務(wù)地址,遠(yuǎn)程對象等等——這些我們都可以統(tǒng)稱他們?yōu)槊郑∟ame)。其中較為常見的就是一些分布式服務(wù)框架中的服務(wù)地址列表。通過調(diào)用ZK提供的創(chuàng)建節(jié)點的API,能夠很容易創(chuàng)建一個全局唯一的path,這個path就可以作為一個名稱。

    注意,所有向ZK上注冊的地址都是臨時節(jié)點,這樣就能夠保證服務(wù)提供者和消費者能夠自動感應(yīng)資源的變化。

  3. 分布式通知/協(xié)調(diào)

    ZooKeeper中特有watcher注冊與異步通知機制,能夠很好的實現(xiàn)分布式環(huán)境下不同系統(tǒng)之間的通知與協(xié)調(diào),實現(xiàn)對數(shù)據(jù)變更的實時處理。使用方法通常是不同系統(tǒng)都對ZK上同一個znode進行注冊,監(jiān)聽znode的變化(包括znode本身內(nèi)容及子節(jié)點的),其中一個系統(tǒng)update了znode,那么另一個系統(tǒng)能夠收到通知,并作出相應(yīng)處理

    1). 另一種心跳檢測機制:檢測系統(tǒng)和被檢測系統(tǒng)之間并不直接關(guān)聯(lián)起來,而是通過zk上某個節(jié)點關(guān)聯(lián),大大減少系統(tǒng)耦合。

    2). 另一種系統(tǒng)調(diào)度模式:某系統(tǒng)有控制臺和推送系統(tǒng)兩部分組成,控制臺的職責(zé)是控制推送系統(tǒng)進行相應(yīng)的推送工作。管理人員在控制臺作的一些操作,實際上是修改了ZK上某些節(jié)點的狀態(tài),而ZK就把這些變化通知給他們注冊Watcher的客戶端,即推送系統(tǒng),于是,作出相應(yīng)的推送任務(wù)。

    3). 另一種工作匯報模式:一些類似于任務(wù)分發(fā)系統(tǒng),子任務(wù)啟動后,到zk來注冊一個臨時節(jié)點,并且定時將自己的進度進行匯報(將進度寫回這個臨時節(jié)點),這樣任務(wù)管理者就能夠?qū)崟r知道任務(wù)進度。

    總之,使用zookeeper來進行分布式通知和協(xié)調(diào)能夠大大降低系統(tǒng)之間的耦合

  4. 集群管理與Master選舉

    Master選舉則是zookeeper中最為經(jīng)典的應(yīng)用場景了。

  5. 分布式鎖

    分布式鎖,這個主要得益于ZooKeeper為我們保證了數(shù)據(jù)的強一致性。鎖服務(wù)可以分為兩類,一個是 保持獨占,另一個是 控制時序。

  6. 分布式隊列

    隊列方面,簡單地講有兩種,一種是常規(guī)的先進先出隊列,另一種是要等到隊列成員聚齊之后的才統(tǒng)一按序執(zhí)行。對于第一種先進先出隊列,和分布式鎖服務(wù)中的控制時序場景基本原理一致,這里不再贅述。 第二種隊列其實是在FIFO隊列的基礎(chǔ)上作了一個增強。通??梢栽?/queue 這個znode下預(yù)先建立一個/queue/num 節(jié)點,并且賦值為n(或者直接給/queue賦值n),表示隊列大小,之后每次有隊列成員加入后,就判斷下是否已經(jīng)到達隊列大小,決定是否可以開始執(zhí)行了。這種用法的典型場景是,分布式環(huán)境中,一個大任務(wù)Task A,需要在很多子任務(wù)完成(或條件就緒)情況下才能進行。這個時候,凡是其中一個子任務(wù)完成(就緒),那么就去 /taskList 下建立自己的臨時時序節(jié)點(CreateMode.EPHEMERAL_SEQUENTIAL),當(dāng) /taskList 發(fā)現(xiàn)自己下面的子節(jié)點滿足指定個數(shù),就可以進行下一步按序進行處理了。

三. ZooKeeper的集群安裝部署

**要將 ZK 集群的節(jié)點數(shù)量要為奇數(shù)(2n+1:如 3、5、7 個節(jié)點)較為合適**

服務(wù)器 1:192.168.1.81  端口:2181、2881、3881
服務(wù)器 2:192.168.1.82  端口:2182、2882、3882
服務(wù)器 3:192.168.1.83  端口:2183、2883、3883

1. 修改/etc/hosts

192.168.1.81  zk-01
192.168.1.82  zk-02
192.168.1.83  zk-03 

2. 解壓zookeeper,在安裝目錄中創(chuàng)建data,logs目錄

3. copy 安裝文件中conf/ 下的 zoo_sample.cfg 

    cp zoo_sample.cfg zoo.cfg

4. 配置每個節(jié)點的zoo.cfg,例如:

    #心跳時間
    tickTime=2000
    #Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器
    initLimit=10
    syncLimit=5
    dataDir=/${ZK_HOME}/node-01/data
    dataLogDir=/${ZK_HOME}/node-01/logs
    clientPort=2181
    server.1=zk-01:2881:3881
    server.2=zk-02:2882:3882
    server.3=zk-03:2883:3883

5. 在 dataDir=/${ZK_HOME}/data 下創(chuàng)建 myid 文件分別是配置中server.x中x的值

6. iptables中過濾暴露的端口

7. 啟動 /${ZK_HOME}/bin/zkServer.sh start

8. 偵聽 tail -500f /${ZK_HOME}/bin/zookeeper.out

以上是“ZooKeeper集群如何安裝、配置 ”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI