大數(shù)據(jù)之zookeeper

1: zookeeper 是什么

是一個針對大型分布式系統(tǒng)的可靠協(xié)調(diào)系統(tǒng)

提供的功能包括:配置維護朋鞍、名字服務(wù)队橙、分布式同步、組服務(wù)等连躏;

zookeeper已經(jīng)成為Hadoop生態(tài)系統(tǒng)中的基礎(chǔ)組件剩岳。

2: zookeeper 特點

最終一致性:為客戶端展示同一視圖,這是Zookeeper最重要的性能入热;

可靠性:如果消息被一臺服務(wù)器接受拍棕,那么它將被所有的服務(wù)器接受;

原子性:更新只能成功或失敗勺良,沒有中間狀態(tài)绰播;

3: ?zookeeper都能做什么

?3.1?統(tǒng)一命名服務(wù)

背景:在我們的應(yīng)用中也會存在很多這類問題,特別是在我們的服務(wù)特別多的時候尚困,如果我們在本地保存服務(wù)的地址的時候?qū)⒎浅2环奖愦缆幔侨绻覀冎恍枰L問一個大家都熟知的訪問點,這里提供統(tǒng)一的入口事甜,那么維護起來將方便得多了谬泌。

我們可以在概括為以下幾點場景:

1)分布式環(huán)境下,經(jīng)常需要對應(yīng)用/服務(wù)進行統(tǒng)一命名逻谦,便于識別不同的服務(wù)

類似于域名與ip之間對應(yīng)關(guān)系掌实,域名容易記住邦马;

通過名稱來獲取資源或服務(wù)的地址贱鼻,提供者信息。

2) 按照層次結(jié)構(gòu)組織服務(wù)/應(yīng)用名稱

解決方案: 采用zookeeper

可將服務(wù)名稱以及地址信息寫在Zookeeper上滋将,客戶端通過Zookeeper獲取可用服務(wù)列表邻悬。

3.2 配置管理

背景:如果我們配置非常多,有很多服務(wù)器都需要這個配置随闽,而且還可能是動態(tài)的話使用配置文件就不是個好主意了父丰。這個時候往往需要尋找一種集中管理配置的方法,我們在這個集中的地方修改了配置橱脸,所有對這個配置感興趣的都可以獲得變更础米。

我們可以用一個集群來提供這個配置服務(wù),但是用集群提升可靠性添诉,那如何保證配置在集群中的一致性呢屁桑? 這個時候就需要使用一種實現(xiàn)了一致性協(xié)議的服務(wù)了。Zookeeper就是這種服務(wù)栏赴。

解決方案:采用zookeeper

原因如下:

1) 配置管理可交由Zookeeper實現(xiàn)

2) 可將配置信息寫入Zookeeper的一個znode上蘑斧;

3) ?各個節(jié)點監(jiān)聽這個znode

?4) 一旦znode中的數(shù)據(jù)被修改,Zookeeper將會通知各個節(jié)點须眷。

3.3 分布式鎖

背景: 在一個分布式環(huán)境中竖瘾,為了提高可靠性,我們的集群的每臺服務(wù)器上都部署著同樣的服務(wù)花颗。但是捕传,一件事情如果集群中的每個服務(wù)器都進行的話,那相互之間就要協(xié)調(diào)扩劝,編程起來將非常復(fù)雜。而如果我們只讓一個服務(wù)進行操作棒呛,那又存在單點聂示。通常還有一種做法就是使用分布式鎖,在某個時刻只讓一個服務(wù)去干活簇秒,當(dāng)這臺服務(wù)出問題的時候鎖釋放鱼喉,立即fail over到另外的服務(wù)

解決方案: 采用zookeeper

原因如下:

(1)Zookeeper是強一致性的

多個客戶端同時在Zookeeper上創(chuàng)建相同znode,只有一個創(chuàng)建成功趋观。

(2)實現(xiàn)鎖的獨占性

?多個客戶端同時在Zookeeper上創(chuàng)建相同znode扛禽,創(chuàng)建成功的那個客戶端得到鎖,其他客 ?戶端等待拆内。

(3)控制鎖的時序

各個客戶端在某個znode下創(chuàng)建臨時znode(類型為CreateMode.EPHEMERAL_SEQUENTIAL)旋圆,這樣,該znode可掌握全局訪問時序麸恍。

3.4 集群管理

背景:在分布式的集群中灵巧,經(jīng)常會由于各種原因,比如硬件故障抹沪,軟件故障刻肄,網(wǎng)絡(luò)問題,有些節(jié)點會進進出出融欧。有新的節(jié)點加入進來敏弃,也有老的節(jié)點退出集群。這個時候噪馏,集群中其他機器需要感知到這種變化麦到,然后根據(jù)這種變化做出對應(yīng)的決策绿饵。比如我們是一個分布式存儲系統(tǒng),有一個中央控制節(jié)點負(fù)責(zé)存儲的分配瓶颠,當(dāng)有新的存儲進來的時候我們要根據(jù)現(xiàn)在集群目前的狀態(tài)來分配存儲節(jié)點拟赊。這個時候我們就需要動態(tài)感知到集群目前的狀態(tài)

解決方案: 采用zookeeper

原因如下:

1)分布式環(huán)境下,實時掌握每個節(jié)點的狀態(tài)是必要的

可根據(jù)節(jié)點實時狀態(tài)做出一些調(diào)整粹淋。

2)可交由Zookeeper實現(xiàn)

可將節(jié)點信息寫入Zookeeper的一個znode上吸祟;

監(jiān)聽這個znode可獲得它的實時狀態(tài)變化。

3)典型應(yīng)用

HBase中Master狀態(tài)的監(jiān)控與選舉桃移。

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

原理其實就是發(fā)布/訂閱屋匕。

1)分布式環(huán)境下經(jīng)常存在一個服務(wù)需要知道它所管理的子服務(wù)的狀態(tài)

NameNode需要知道各DataNode的狀態(tài)

2)心跳檢測機制可通過Zookeeper實現(xiàn)

3)信息推送可由Zookeeper實現(xiàn)(發(fā)布/訂閱模式)

4: ? 配置zookeeper集群過程

? ? ? ?1) ??tar zxf zookeeper-3.4.6.tar.gz

? ? ? ?2) ?cd zookeeper-3.4.6

? ? ? ?3)?mkdir -p dataDir ? //創(chuàng)建快照日志存放目錄

? ? ? ?4)?mkdir dataLogDir ?//創(chuàng)建事務(wù)日志存放目錄

? ? ? ?5)?cd conf

? ? ? ?6)?mv zoo_sample.cfg zoo.cfg

? ? ? ?7) ?vim zoo.cfg

添加如下內(nèi)容:

? ? ? ? ? ?dataDir=/usr/local/zookeeper-3.4.6/dataDir

? ? ? ? ? ?dataLogDir=/usr/local/zookeeper-3.4.6/dataLogDir

? ? ? ? ? ??server.1=console:2888:3888

? ? ? ? ? ? server.2=log1:2888:3888

? ? ? ? ? ? server.3=log2:2888:3888

? ? ? 8) ?在我們配置的dataDir指定的目錄下面,創(chuàng)建一個myid文件借杰,里面內(nèi)容為一個數(shù)字过吻,用來標(biāo)識當(dāng)前主機,conf/zoo.cfg文件中配置的server.X中X為什么數(shù)字蔗衡,則myid文件中就輸入這個數(shù)字

? ? 9)?遠(yuǎn)程復(fù)制第一臺的zk到另外兩臺上疮装,并修改myid文件為2和3

? ? ? ? ?scp -rp zookeeper-3.4.6 root@114.55.29.86:/usr/local/

? ? ? ? ?scp -rp zookeeper-3.4.6 root@114.55.29.241:/usr/local/

? ? 10) 啟動和關(guān)閉zk

? ? ? ? ? ?./zkServer.sh start?

? ? ? ? ? ?./zkServer.sh stop

? ? ? ? ? ?./zkServer.sh status

5: ? zookeeper 中幾個重要配置

tickTime: zookeeper中使用的基本時間單位, 毫秒值.

dataDir: 數(shù)據(jù)目錄. 可以是任意目錄.

dataLogDir: log目錄, 同樣可以是任意目錄. 如果沒有設(shè)置該參數(shù), 將使用和dataDir相同的設(shè)置.

clientPort: 監(jiān)聽client連接的端口號.

dataDir和 dataLogDir有什么區(qū)別:dataDir用來存儲ZKDatabase的快照文件(Snapshot File);而dataLogDir用來存儲對ZKDatabase所做操作的操作日志文件(Transaction Log File)粘都,如果不配置dataLogDir廓推,則dataLogDir=dataDir。


6: ? zookeeper應(yīng)用到的系統(tǒng)

HDFS ? ?YARN ? Storm ? HBase ? Flume ? Dubbo ? metaq

參考資料:

1)?http://blog.chinaunix.net/uid-29792372-id-5785351.html

2)?https://www.cnblogs.com/yuyijq/p/3424473.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翩隧,一起剝皮案震驚了整個濱河市樊展,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堆生,老刑警劉巖专缠,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淑仆,居然都是意外死亡涝婉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門蔗怠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墩弯,“玉大人,你說我怎么就攤上這事寞射∮婀ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵桥温,是天一觀的道長引矩。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么旺韭? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任氛谜,我火速辦了婚禮,結(jié)果婚禮上区端,老公的妹妹穿的比我還像新娘混蔼。我一直安慰自己,他們只是感情好珊燎,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遵湖,像睡著了一般悔政。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上延旧,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天谋国,我揣著相機與錄音,去河邊找鬼迁沫。 笑死芦瘾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的集畅。 我是一名探鬼主播近弟,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挺智!你這毒婦竟也來了祷愉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤赦颇,失蹤者是張志新(化名)和其女友劉穎二鳄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒怯,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡订讼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扇苞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欺殿。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鳖敷,靈堂內(nèi)的尸體忽然破棺而出祈餐,到底是詐尸還是另有隱情,我是刑警寧澤哄陶,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布帆阳,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜒谤。R本人自食惡果不足惜山宾,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳍徽。 院中可真熱鬧资锰,春花似錦、人聲如沸阶祭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽濒募。三九已至鞭盟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瑰剃,已是汗流浹背齿诉。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晌姚,地道東北人粤剧。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像挥唠,于是被迫代替她去往敵國和親抵恋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348