zookeeper安裝

//下載
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
//解壓
tar xvf zookeeper-3.4.6.tar.gz
//文件夾重命名
mv zookeeper-3.4.6 zk
//配置環(huán)境變量
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

cd conf/
mv zoo_sample.cfg zoo_1.cfg
mv zoo_sample.cfg zoo_2.cfg
mv zoo_sample.cfg zoo_3.cfg

zoo_1.cfg:

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/zk/data_1

# the port at which the clients will connect
clientPort=2181

#the location of the log file
dataLogDir=/usr/local/zk/logs_1

server.0=128.199.173.52:2287:3387
server.1=128.199.173.52:2288:3388
server.2=128.199.173.52:2289:3389

zoo_2.cfg:

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/zk/data_2

# the port at which the clients will connect
clientPort=2182

#the location of the log file
dataLogDir=/usr/local/zk/logs_2

server.0=128.199.173.52:2287:3387
server.1=128.199.173.52:2288:3388
server.2=128.199.173.52:2289:3389

zoo_3.cfg:

# The number of milliseconds of each tick
tickTime=2000

# The number of ticks that the initial
# synchronization phase can take
initLimit=10

# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5

# the directory where the snapshot is stored.
dataDir=/usr/local/zk/data_3

# the port at which the clients will connect
clientPort=2183

#the location of the log file
dataLogDir=/usr/local/zk/logs_3

server.0=128.199.XXX.XX:2287:3387
server.1=128.199.XXX.XX:2288:3388
server.2=128.199.XXX.XX:2289:3389   
  • initLimit:這個(gè)配置項(xiàng)是用來(lái)配置 Zookeeper 接受客戶(hù)端(這里所說(shuō)的客戶(hù)端不是用戶(hù)連接 Zookeeper 服務(wù)器的客戶(hù)端塞俱,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)。當(dāng)已經(jīng)超過(guò) 10 個(gè)心跳的時(shí)間(也就是 tickTime)長(zhǎng)度后 Zookeeper 服務(wù)器還沒(méi)有收到客戶(hù)端的返回信息,那么表明這個(gè)客戶(hù)端連接失敗赤套」倏ǎ總的時(shí)間長(zhǎng)度就是 10*2000=20 秒枚粘。
  • syncLimit:這個(gè)配置項(xiàng)標(biāo)識(shí) Leader 與 Follower 之間發(fā)送消息户敬,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度唉擂,最長(zhǎng)不能超過(guò)多少個(gè) tickTime 的時(shí)間長(zhǎng)度厂捞,總的時(shí)間長(zhǎng)度就是 5*2000=10 秒输玷。
  • server.A=B:C:D:其中 A 是一個(gè)數(shù)字,表示這個(gè)是第幾號(hào)服務(wù)器靡馁,就是集群模式下配置的myid文件所存放的數(shù)值欲鹏;B是這個(gè)服務(wù)器的ip地址;C表示的是這個(gè)服務(wù)器與集群中的 Leader 服務(wù)器交換信息的端口臭墨;D 表示的是萬(wàn)一集群中的 Leader 服務(wù)器掛了赔嚎,需要一個(gè)端口來(lái)重新進(jìn)行選舉,選出一個(gè)新的Leader胧弛,而這個(gè)端口就是用來(lái)執(zhí)行選舉時(shí)服務(wù)器相互通信的端口尽狠。如果是偽集群的配置方式,由于B都是一樣叶圃,所以不同的Zookeeper 實(shí)例通信端口號(hào)不能一樣袄膏,所以要給它們分配不同的端口號(hào)。

/usr/local/zk/data_x目錄中分別創(chuàng)建myid掺冠,cfg文件中的server.X沉馆,“X”表示每個(gè)目錄中的myid的值。

vi myid

在bin目錄中啟動(dòng)zookeeper

./zkServer.sh start zoo1.cfg

在bin目錄中查看zookeeper運(yùn)行狀態(tài)

./zkServer.sh status zoo1.cfg

通過(guò)客戶(hù)端連接德崭,進(jìn)入zookeeper命令行

bin/zkCli.sh -server 128.199.XXX.XX:2181,128.199.XXX.XX:2182,128.199.XXX.XX:2183

zookeeper命令:

//查看操作
help
//查看已經(jīng)存在的znode
ls /
//創(chuàng)建znode
create /test "test"
//獲取znode
get /test
//刪除znode斥黑。若刪除節(jié)點(diǎn)存在子節(jié)點(diǎn),必須先刪除子節(jié)點(diǎn)眉厨,再刪除父節(jié)點(diǎn)锌奴。
delete /test
//創(chuàng)建臨時(shí)節(jié)點(diǎn),創(chuàng)建它的客戶(hù)端斷開(kāi)時(shí)會(huì)自動(dòng)刪除
create -e /test-temp "temp"
//創(chuàng)建順序節(jié)點(diǎn)憾股,會(huì)在節(jié)點(diǎn)名后添加自增長(zhǎng)數(shù)字
create -s /test-no. ""
//更新節(jié)點(diǎn)
set /test "test2"
//退出
quit
  • Znode維護(hù)著數(shù)據(jù)鹿蜀、ACL(access control list箕慧,訪(fǎng)問(wèn)控制列表)、時(shí)間戳等交換版本號(hào)等數(shù)據(jù)結(jié)構(gòu)茴恰。每當(dāng)Znode中的數(shù)據(jù)更新后它所維護(hù)的版本號(hào)將增加颠焦,這非常類(lèi)似于數(shù)據(jù)庫(kù)中計(jì)數(shù)器時(shí)間戳的操作方式。另外Znode還具有原子性操作的特點(diǎn):命名空間中往枣,每一個(gè)Znode的數(shù)據(jù)將被原子地讀寫(xiě)伐庭。讀操作將讀取與Znode相關(guān)的所有數(shù)據(jù),寫(xiě)操作將替換掉所有的數(shù)據(jù)分冈。除此之外圾另,每一個(gè)節(jié)點(diǎn)都有一個(gè)訪(fǎng)問(wèn)控制列表,這個(gè)訪(fǎng)問(wèn)控制列表規(guī)定了用戶(hù)操作的權(quán)限雕沉。
    ZooKeeper中同樣存在臨時(shí)節(jié)點(diǎn)集乔。這些節(jié)點(diǎn)與session同時(shí)存在,當(dāng)session生命周期結(jié)束蘑秽,這些臨時(shí)節(jié)點(diǎn)也將被刪除。臨時(shí)節(jié)點(diǎn)在某些場(chǎng)合也發(fā)揮著非常重要的作用箫攀。

  • Watch機(jī)制就是監(jiān)控某一個(gè)或者一些Znode的變化肠牲。一個(gè)Watch事件是一個(gè)一次性的觸發(fā)器,當(dāng)被設(shè)置了Watch的數(shù)據(jù)發(fā)生了改變的時(shí)候靴跛,則服務(wù)器將這個(gè)改變發(fā)送給設(shè)置了Watch的客戶(hù)端缀雳,以便通知它們。
    Watch機(jī)制主要有以下三個(gè)特點(diǎn):
    1.一次性的觸發(fā)器
    當(dāng)數(shù)據(jù)改變的時(shí)候梢睛,那么一個(gè)Watch事件會(huì)產(chǎn)生并且被發(fā)送到客戶(hù)端中肥印。但是客戶(hù)端只會(huì)收到一次這樣的通知,如果以后這個(gè)數(shù)據(jù)再次發(fā)生改變的時(shí)候绝葡,之前設(shè)置Watch的客戶(hù)端將不會(huì)再次收到改變的通知深碱。
    例子:如果客戶(hù)端調(diào)用了 getData("/znode1", true) 并且稍后 /znode1 節(jié)點(diǎn)上的數(shù)據(jù)發(fā)生了改變或者被刪除了,客戶(hù)端將會(huì)獲取到 /znode1 發(fā)生變化的監(jiān)視事件藏畅,而如果 /znode1 再一次發(fā)生了變化敷硅,除非客戶(hù)端再次對(duì) /znode1 設(shè)置監(jiān)視,否則客戶(hù)端不會(huì)收到事件通知愉阎。
    2.發(fā)送給客戶(hù)端(Sent to the client)
    這個(gè)表明了Watch的通知事件是從服務(wù)器發(fā)送給客戶(hù)端的绞蹦,Zookeeper客戶(hù)端和服務(wù)端是通過(guò)Socket進(jìn)行通信的,是異步的榜旦,這就表明不同的客戶(hù)端收到的Watch的時(shí)間可能不同(或因?yàn)楣收喜粫?huì)成功地到達(dá)客戶(hù)端)幽七,但是ZooKeeper有保證當(dāng)一個(gè)客戶(hù)端在看到Watch事件之前不會(huì)看到結(jié)點(diǎn)數(shù)據(jù)的變化。
    例子:A=3溅呢,此時(shí)在上面設(shè)置了一次Watch澡屡,如果A突然變成4了猿挚,那么客戶(hù)端會(huì)先收到Watch事件的通知,然后才會(huì)看到A=4挪蹭。
    3.被設(shè)置Watch的數(shù)據(jù)
    znode 節(jié)點(diǎn)本身具有不同的改變方式亭饵。也可以想象 Zookeeper 維護(hù)了兩條監(jiān)視鏈表:數(shù)據(jù)監(jiān)視和子節(jié)點(diǎn)監(jiān)視getData()/exists()設(shè)置數(shù)據(jù)監(jiān)視。getChildren() 設(shè)置子節(jié)點(diǎn)監(jiān)視梁厉。
    例子:
    一次成功的 setData()會(huì)觸發(fā)設(shè)置在某一節(jié)點(diǎn)上所設(shè)置的數(shù)據(jù)監(jiān)視辜羊。
    一次成功的 create() 操作則會(huì)出發(fā)當(dāng)前節(jié)點(diǎn)上所設(shè)置的數(shù)據(jù)監(jiān)視以及父節(jié)點(diǎn)的子節(jié)點(diǎn)監(jiān)視(child watch)。
    一次成功的 delete() 操作將會(huì)觸發(fā)當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)監(jiān)視和子節(jié)點(diǎn)監(jiān)視事件词顾,同時(shí)也會(huì)觸發(fā)該節(jié)點(diǎn)父節(jié)點(diǎn)的的子節(jié)點(diǎn)監(jiān)視(child watch)八秃。
    當(dāng)客戶(hù)端與Zookeeper服務(wù)器端失去聯(lián)系時(shí),客戶(hù)端并不會(huì)收到監(jiān)視事件的通知肉盹,當(dāng)客戶(hù)端重新連接后昔驱,以前注冊(cè)的監(jiān)視會(huì)重新被注冊(cè)并觸發(fā),對(duì)于開(kāi)發(fā)人員來(lái)說(shuō) 這通常是透明的上忍。只有一種情況會(huì)導(dǎo)致監(jiān)視事件的丟失骤肛,即:通過(guò)exists()設(shè)置了某個(gè)znode節(jié)點(diǎn)的監(jiān)視,但是如果某個(gè)客戶(hù)端在此znode節(jié)點(diǎn)被創(chuàng)建和刪除的時(shí)間間隔內(nèi)與zookeeper服務(wù)器失去了聯(lián)系窍蓝,該客戶(hù)端即使稍后重新連接 zookeeper服務(wù)器后也得不到事件通知腋颠。

  • ACL訪(fǎng)問(wèn)控制列表。ZooKeeper使用ACL來(lái)控制對(duì)旗下Znode結(jié)點(diǎn)們的訪(fǎng)問(wèn)吓笙。通過(guò)設(shè)置權(quán)限為來(lái)表明是否允許改變一個(gè)結(jié)點(diǎn)的內(nèi)容淑玫。需要注意的是一條ACL僅針對(duì)于一個(gè)特定的節(jié)點(diǎn),不適用于子節(jié)點(diǎn)面睛。
    例子:如果/app 只對(duì)IP:172.16.16.1可讀 而 / APP/status 是對(duì)任何人可讀的絮蒿。
    與傳統(tǒng)Linux機(jī)制不同,一個(gè)結(jié)點(diǎn)的數(shù)據(jù)沒(méi)有類(lèi)似“擁有者叁鉴,組用戶(hù)土涝,其他用戶(hù)”的概念,在ZooKeeper中幌墓,ACL通過(guò)設(shè)置ID以及與其關(guān)聯(lián)的權(quán)限來(lái)完成訪(fǎng)問(wèn)控制的回铛。ACL的權(quán)限組成語(yǔ)法是:(scheme:expression, perms)。前者表明設(shè)置的ID克锣,逗號(hào)后面表示的是ID相關(guān)的權(quán)限茵肃。
    例子:ip:172.16.16.1,READ 指明了IP地址為如上的用戶(hù)的權(quán)限為只讀。

      可設(shè)置的schemes:
      world 有個(gè)唯一的id, anyone 袭祟,代表所有人验残。
      auth 不使用任何id,代表任何已認(rèn)證的用戶(hù)巾乳。
      digest 用 username:password 字符串來(lái)產(chǎn)生一個(gè)MD5串您没,然后該串被用來(lái)作為ACL ID鸟召。認(rèn)證是通過(guò)明文發(fā)送username:password 來(lái)進(jìn)行的,當(dāng)用在A(yíng)CL時(shí)氨鹏,表達(dá)式為username:base64 欧募,base64是password的SHA1摘要的編碼。
      ip 使用客戶(hù)端的主機(jī)IP作為ACL ID 仆抵。這個(gè)ACL表達(dá)式的格式為addr/bits 跟继,此時(shí)addr中的有效位與客戶(hù)端addr中的有效位進(jìn)行比對(duì)。
    
      可設(shè)置的權(quán)限:
      CREATE:表明你可以創(chuàng)建一個(gè)Znode的子結(jié)點(diǎn)镣丑。
      READ:你可以得到這個(gè)結(jié)點(diǎn)的數(shù)據(jù)以及列舉該結(jié)點(diǎn)的子結(jié)點(diǎn)情況舔糖。
      WRITE:設(shè)置一個(gè)結(jié)點(diǎn)的數(shù)據(jù)。
      DELETE:可以刪除一個(gè)結(jié)點(diǎn)
      ADMIN:對(duì)一個(gè)結(jié)點(diǎn)設(shè)置權(quán)限莺匠。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末金吗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趣竣,更是在濱河造成了極大的恐慌摇庙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遥缕,死亡現(xiàn)場(chǎng)離奇詭異卫袒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)通砍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)玛臂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)封孙,“玉大人,你說(shuō)我怎么就攤上這事讽营。” “怎么了橱鹏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)莉兰。 經(jīng)常有香客問(wèn)我挑围,道長(zhǎng),這世上最難降的妖魔是什么糖荒? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任杉辙,我火速辦了婚禮,結(jié)果婚禮上捶朵,老公的妹妹穿的比我還像新娘蜘矢。我一直安慰自己狂男,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布品腹。 她就那樣靜靜地躺著岖食,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舞吭。 梳的紋絲不亂的頭發(fā)上泡垃,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音镣典,去河邊找鬼兔毙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛兄春,可吹牛的內(nèi)容都是我干的澎剥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赶舆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哑姚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起芜茵,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叙量,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后九串,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绞佩,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年猪钮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了品山。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡烤低,死狀恐怖肘交,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扑馁,我是刑警寧澤涯呻,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站腻要,受9級(jí)特大地震影響复罐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雄家,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一效诅、第九天 我趴在偏房一處隱蔽的房頂上張望填帽。 院中可真熱鬧,春花似錦篡腌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抖苦,卻和暖如春米死,著一層夾襖步出監(jiān)牢的瞬間锌历,已是汗流浹背究西。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工卤材, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峦失,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓晕拆,卻偏偏與公主長(zhǎng)得像材蹬,于是被迫代替她去往敵國(guó)和親吝镣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堤器,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一、ZooKeeper的背景 1.1 認(rèn)識(shí)ZooKeeper ZooKeeper---譯名為“動(dòng)物園管理員”。動(dòng)物...
    algernoon閱讀 9,071評(píng)論 1 106
  • 1 Zookeeper概述# ZooKeeper是一個(gè)為分布式應(yīng)用所設(shè)計(jì)的分布的表蝙、開(kāi)源的協(xié)調(diào)服務(wù)府蛇,它主要是用來(lái)解決...
    七寸知架構(gòu)閱讀 7,354評(píng)論 0 101
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理屿愚,服務(wù)發(fā)現(xiàn),斷路器穷遂,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • ZooKeeper是一個(gè)分布式的蚪黑,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它包含一個(gè)簡(jiǎn)單的原語(yǔ)集中剩,分布式應(yīng)用程序可以基于...
    Prize閱讀 248評(píng)論 0 1
  • ZooKeeper是一個(gè)分布式的咽安,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它包含一個(gè)簡(jiǎn)單的原語(yǔ)集澡腾,分布式應(yīng)用程序可以基于...
    caryr閱讀 365評(píng)論 0 0