Zookeeper的简介及命令行操作
- 目錄
- 前言
- 1、Zookeeper簡(jiǎn)介
- 2、Zookeeper結(jié)構(gòu)
- 3、Zookeeper常用的命令行操作
- 總結(jié):
目錄
前言
作為一款第三方的協(xié)調(diào)服務(wù)框架,ZK被應(yīng)用在許多地方,如:Hbase中用于存儲(chǔ)-ROOT表的位置信息;Storm中用于保存任務(wù)分配的信息、心跳信息、元數(shù)據(jù)信息等。只要是在整個(gè)設(shè)計(jì)中需要一個(gè)第三方的組件來(lái)滿足“元數(shù)據(jù)的存儲(chǔ)、提供監(jiān)聽服務(wù)”的需求,ZK都可以滿足。接下來(lái)就簡(jiǎn)單介紹下ZK。
1、Zookeeper簡(jiǎn)介
Zookeeper**是一個(gè)分布式協(xié)調(diào)服務(wù);就是為用戶的分布式應(yīng)用程序提供協(xié)調(diào)服務(wù)**
A、zookeeper是為別的分布式程序服務(wù)的
B、Zookeeper本身就是一個(gè)分布式程序(只要有半數(shù)以上節(jié)點(diǎn)存活,ZK就能正常服務(wù))
C、Zookeeper所提供的服務(wù)涵蓋:主從協(xié)調(diào)、服務(wù)器節(jié)點(diǎn)動(dòng)態(tài)上下線、統(tǒng)一配置管理、分布式共享鎖、統(tǒng)一名稱服務(wù)……
D、雖然說(shuō)可以提供各種服務(wù),但是zookeeper在底層其實(shí)只提供了兩個(gè)功能:
- 管理(存儲(chǔ),讀取)用戶程序提交的數(shù)據(jù)(狀態(tài)數(shù)據(jù));
- 并為用戶程序提供數(shù)據(jù)節(jié)點(diǎn)監(jiān)聽服務(wù);
Zookeeper常用應(yīng)用場(chǎng)景:
1、服務(wù)器集群上的采集程序需要實(shí)時(shí)從相關(guān)的服務(wù)器拿數(shù)據(jù),若服務(wù)器掛了,會(huì)造成損失。需要一個(gè)第三方來(lái)記錄每臺(tái)服務(wù)器的采集數(shù)據(jù)的狀態(tài)信息和監(jiān)聽每臺(tái)服務(wù)器的狀態(tài),以及提供選舉策略來(lái)支撐由那臺(tái)服務(wù)器來(lái)接替掛了的服務(wù)器。
2、若幾臺(tái)服務(wù)器的一些配置文件相同,可以將這些文件放置到第三方上,通過(guò)第三方來(lái)傳輸這些文件到相應(yīng)的服務(wù)器上(更新配置文件時(shí)也只需更新第三方上的一個(gè)配置文件即可)。
Zookeeper集群的角色: Leader 和 follower (Observer)
Zookeeper特性:
1、Zookeeper:一個(gè)leader,多個(gè)follower組成的集群
2、全局?jǐn)?shù)據(jù)一致:每個(gè)server保存一份相同的數(shù)據(jù)副本,client無(wú)論連接到哪個(gè)server,數(shù)據(jù)都是一致的
3、分布式讀寫,更新請(qǐng)求轉(zhuǎn)發(fā),由leader實(shí)施
4、更新請(qǐng)求順序進(jìn)行,來(lái)自同一個(gè)client的更新請(qǐng)求按其發(fā)送順序依次執(zhí)行
5、數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗
6、實(shí)時(shí)性,在一定時(shí)間范圍內(nèi),client能讀到最新數(shù)據(jù)
2、Zookeeper結(jié)構(gòu)
2.1、Zookeeper數(shù)據(jù)結(jié)構(gòu):
1、層次化的目錄結(jié)構(gòu),命名符合常規(guī)文件系統(tǒng)規(guī)范(見下圖)
2、每個(gè)節(jié)點(diǎn)在zookeeper中叫做znode,并且其有一個(gè)唯一的路徑標(biāo)識(shí)
3、節(jié)點(diǎn)Znode可以包含數(shù)據(jù)和子節(jié)點(diǎn)(但是EPHEMERAL類型的節(jié)點(diǎn)不能有子節(jié)點(diǎn),下一頁(yè)詳細(xì)講解)
4、客戶端應(yīng)用可以在節(jié)點(diǎn)上設(shè)置監(jiān)視器(后續(xù)詳細(xì)講解)
2.2、數(shù)據(jù)結(jié)構(gòu)的圖
2.3、節(jié)點(diǎn)類型
1、Znode有兩種類型:
短暫(ephemeral)(斷開連接自己刪除)
持久(persistent)(斷開連接不刪除)
2、Znode有四種形式的目錄節(jié)點(diǎn)(默認(rèn)是persistent )(帶序列和不帶序列的)
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
3、創(chuàng)建znode時(shí)設(shè)置順序標(biāo)識(shí),znode名稱后會(huì)附加一個(gè)值,順序號(hào)是一個(gè)單調(diào)遞增的計(jì)數(shù)器,由父節(jié)點(diǎn)維護(hù)
4、在分布式系統(tǒng)中,順序號(hào)可以被用于為所有的事件進(jìn)行全局排序,這樣客戶端可以通過(guò)順序號(hào)推斷事件的順序
3、Zookeeper常用的命令行操作
運(yùn)行 zkCli.sh –server <ip>進(jìn)入命令行工具 1、使用 ls 命令來(lái)查看當(dāng)前 ZooKeeper 中所包含的內(nèi)容: [zk: 202.115.36.251:2181(CONNECTED) 1] ls / 2、創(chuàng)建一個(gè)新的 znode ,使用 create /zk myData 。這個(gè)命令創(chuàng)建了一個(gè)新的 znode 節(jié)點(diǎn)“ zk ”以及與它關(guān)聯(lián)的字符串: [zk: 202.115.36.251:2181(CONNECTED) 2] create /zk "myData“ 3、我們運(yùn)行 get 命令來(lái)確認(rèn) znode 是否包含我們所創(chuàng)建的字符串: [zk: 202.115.36.251:2181(CONNECTED) 3] get /zk #監(jiān)聽這個(gè)節(jié)點(diǎn)的變化,當(dāng)另外一個(gè)客戶端改變/zk時(shí)(這里只是改變/zk中的數(shù)據(jù)內(nèi)容,當(dāng)文件出現(xiàn)增刪時(shí)用ls /zk watch),它會(huì)打出下面的 #WATCHER:: #WatchedEvent state:SyncConnected type:NodeDataChanged path:/zk [zk: localhost:2181(CONNECTED) 4] get /zk watch 4、下面我們通過(guò) set 命令來(lái)對(duì) zk 所關(guān)聯(lián)的字符串進(jìn)行設(shè)置: [zk: 202.115.36.251:2181(CONNECTED) 4] set /zk "zsl“ 5、下面我們將剛才創(chuàng)建的 znode 刪除: [zk: 202.115.36.251:2181(CONNECTED) 5] delete /zk 6、刪除節(jié)點(diǎn):rmr [zk: 202.115.36.251:2181(CONNECTED) 5] rmr /zk總結(jié):
關(guān)于ZK你應(yīng)該知道以下幾個(gè)點(diǎn):
1、知道是什么;干什么用的。
2、會(huì)用。
3、知道內(nèi)部的工作原理。
如果你知道以上的知識(shí),那么恭喜你已經(jīng)達(dá)到和博主一樣的小菜鳥的級(jí)別。接下來(lái)會(huì)再介紹下ZK內(nèi)部的選舉機(jī)制
(詳見:https://blog.csdn.net/qq_16633405/article/details/79754728)。
總結(jié)
以上是生活随笔為你收集整理的Zookeeper的简介及命令行操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于python+django房屋租赁管
- 下一篇: 2021年最优秀的新闻APP或许是这两个