溫馨提示×

溫馨提示×

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

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

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

發(fā)布時(shí)間:2020-06-22 13:05:35 來源:網(wǎng)絡(luò) 閱讀:647 作者:柴絲言 欄目:建站服務(wù)器

一、什么是Zookeeper

Zookeeper是一個(gè)開源的分布式服務(wù)框架,它是Apache hadoop項(xiàng)目的一個(gè)子項(xiàng)目,主要用來解決分布式應(yīng)用場景中存在的一些問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置管理等。在分布式模式下,能夠?yàn)榉植际綉?yīng)用提供高性能和可靠地協(xié)調(diào)服務(wù),使用Zookeeper可以簡化分布式協(xié)調(diào)服務(wù)的實(shí)現(xiàn)。

Zookeeper提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。

具體可見這個(gè)博客:http://blog.csdn.net/liuyuehu/article/details/52120546

和 http://blog.csdn.net/u012152619/article/details/52908878





二、Zookeeper一般用在什么場合?

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

發(fā)布與訂閱,是發(fā)布者將數(shù)據(jù)發(fā)布到zk節(jié)點(diǎn)上,工訂閱者動(dòng)態(tài)獲取數(shù)據(jù),實(shí)現(xiàn)配置信息的集中式管理和動(dòng)態(tài)更新。例如全局的配置信息,服務(wù)式服務(wù)框架的服務(wù)地址。

(1)應(yīng)用中用到的一些配置信息放到ZK上進(jìn)行集中管理。通常是:應(yīng)用在啟動(dòng)時(shí)會(huì)主動(dòng)來獲取一次配置,在節(jié)點(diǎn)上注冊一個(gè)Watcher,以后每次配置有更新時(shí),都會(huì)實(shí)時(shí)通知給訂閱了的哭護(hù)短,從而達(dá)到獲取最新配置信息的目的。

(2)分布式搜索服務(wù)器中,索引的云信息和服務(wù)器集群機(jī)器的節(jié)點(diǎn)狀態(tài)存放ZK的一些指定節(jié)點(diǎn),供各個(gè)客戶端訂閱使用


負(fù)載均衡

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

消息中間件發(fā)布者和訂閱者的負(fù)載均衡,linkedin開源的KafkaMQ和阿里開源的metaq都是通過zookeeper來做到生產(chǎn)者、消費(fèi)者的負(fù)載均衡。這里以metaq為例講下:

生產(chǎn)者負(fù)載均衡/消費(fèi)者負(fù)載均衡:

metaq發(fā)送消息的時(shí)候,生產(chǎn)者在發(fā)送消息的時(shí)候必須選擇一臺(tái)broker上的一個(gè)分區(qū)來發(fā)送消息,因此metaq在運(yùn)行過程中,會(huì)把所有broker和對應(yīng)的分區(qū)信息全部注冊到ZK指定節(jié)點(diǎn)上,默認(rèn)的策略是一個(gè)依次輪詢的過程,生產(chǎn)者在通過ZK獲取分區(qū)列表之后,會(huì)按照brokerId和partition的順序排列組織成一個(gè)有序的分區(qū)列表,發(fā)送的時(shí)候按照從頭到尾循環(huán)往復(fù)的方式選擇一個(gè)分區(qū)來發(fā)送消息。

在消費(fèi)過程中,一個(gè)消費(fèi)者會(huì)消費(fèi)一個(gè)或多個(gè)分區(qū)中的消息,但是一個(gè)分區(qū)只會(huì)由一個(gè)消費(fèi)者來消費(fèi)。MetaQ的消費(fèi)策略是:

  • 每個(gè)分區(qū)針對同一個(gè)group只掛載一個(gè)消費(fèi)者。

  • 如果同一個(gè)group的消費(fèi)者數(shù)目大于分區(qū)數(shù)目,則多出來的消費(fèi)者將不參與消費(fèi)。

  • 如果同一個(gè)group的消費(fèi)者數(shù)目小于分區(qū)數(shù)目,則有部分消費(fèi)者需要額外承擔(dān)消費(fèi)任務(wù)。

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

(3)命名服務(wù)(Naming Service)

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

Dubbo中使用zookeeper來作為命名服務(wù),維護(hù)全局的服務(wù)地址列表。

在Dubbo(下一個(gè)話題講)中:

服務(wù)提供者在啟動(dòng)的時(shí)候,向ZK上的指定節(jié)點(diǎn)/dubbo/${serviceName}/providers目錄下寫入自己的URL地址,這個(gè)操作就完成了服務(wù)的發(fā)布。

服務(wù)消費(fèi)者啟動(dòng)的時(shí)候,訂閱/dubbo/${serviceName}/providers目錄下的提供者URL地址,并向/dubbo/${serviceName}/consumers目錄下寫入自己的URL地址。

向ZK上注冊的地址都是臨時(shí)節(jié)點(diǎn),這樣就能夠保證服務(wù)提供者和消費(fèi)者能自動(dòng)感應(yīng)資源的變化。

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

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


(5)集群管理與Master選舉:

集群機(jī)器監(jiān)控:通常用于對集群中機(jī)器狀態(tài)有較高的要求的場景,能夠快速對集群中機(jī)器變化做出響應(yīng)。


(6)分布式鎖

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

(7)分布式隊(duì)列

隊(duì)列方面,簡單地講有兩種,一種是常規(guī)的先進(jìn)先出隊(duì)列,另一種是要等到隊(duì)列成員聚齊之后的才統(tǒng)一按序執(zhí)行。

第二種隊(duì)列其實(shí)是在FIFO隊(duì)列的基礎(chǔ)上作了一個(gè)增強(qiáng)。通常可以在 /queue 這個(gè)znode下預(yù)先建立一個(gè)/queue/num 節(jié)點(diǎn),并且賦值為n(或者直接給/queue賦值n),表示隊(duì)列大小,之后每次有隊(duì)列成員加入后,就判斷下是否已經(jīng)到達(dá)隊(duì)列大小,決定是否可以開始執(zhí)行了。這種用法的典型場景是,分布式環(huán)境中,一個(gè)大任務(wù)Task A,需要在很多子任務(wù)完成(或條件就緒)情況下才能進(jìn)行。這個(gè)時(shí)候,凡是其中一個(gè)子任務(wù)完成(就緒),那么就去 /taskList 下建立自己的臨時(shí)時(shí)序節(jié)點(diǎn)(CreateMode.EPHEMERAL_SEQUENTIAL),當(dāng) /taskList 發(fā)現(xiàn)自己下面的子節(jié)點(diǎn)滿足指定個(gè)數(shù),就可以進(jìn)行下一步按序進(jìn)行處理了。







三、windows中下載、安裝Zookeeper,啟動(dòng):

(1)下載在搜索框輸入Zookeeper進(jìn)入官網(wǎng)即可。下載的是zip包,解壓如下:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

(2)bin目錄如下:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

(3)打開控制臺(tái)窗口,并轉(zhuǎn)到bin目錄下:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

運(yùn)行zkServer.cmd:

注意此時(shí)如果啟動(dòng)失敗,意外關(guān)閉,并提示zoo.conf找不到,那么zoo_sample.conf也是可以的,不過要實(shí)現(xiàn)對改文件進(jìn)行部分修改,換成你自己的參數(shù)。如圖:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

Zookeeper啟動(dòng)之后會(huì)顯示如下信息,如圖:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

最后幾行是這樣的:表示啟動(dòng)成功,

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

(4)啟動(dòng)客戶端運(yùn)行查看一下:

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

Zookeeper相關(guān)內(nèi)容及簡單理解、安裝

表示客戶端已經(jīng)順利連接,Zookeeper啟動(dòng)成功!


//可以參考這篇博文:http://blog.csdn.net/morning99/article/details/40426133



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

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

AI