簡介:
主要是用來維護(hù)和監(jiān)控一個(gè)目錄節(jié)點(diǎn)樹中存儲(chǔ)的數(shù)據(jù)的狀態(tài)(維護(hù)一致性)
Path類型:
PERSISTENT:持久化目錄節(jié)點(diǎn)援制,這個(gè)目錄節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)不會(huì)丟失诬像;
PERSISTENT_SEQUENTIAL:順序自動(dòng)編號(hào)的目錄節(jié)點(diǎn),這種目錄節(jié)點(diǎn)會(huì)根據(jù)當(dāng)前已近存在的節(jié)點(diǎn)數(shù)自動(dòng)加 1髓削,然后返回給客戶端已經(jīng)成功創(chuàng)建的目錄節(jié)點(diǎn)名污它;
EPHEMERAL:臨時(shí)目錄節(jié)點(diǎn),一旦創(chuàng)建這個(gè)節(jié)點(diǎn)的客戶端與服務(wù)器端口也就是 session 超時(shí)脸秽,這種節(jié)點(diǎn)會(huì)被自動(dòng)刪除;
EPHEMERAL_SEQUENTIAL:臨時(shí)自動(dòng)編號(hào)節(jié)點(diǎn)
注:Zookeeper 中的目錄節(jié)點(diǎn)權(quán)限不具有傳遞性晨汹,父目錄節(jié)點(diǎn)的權(quán)限不能傳遞給子目錄節(jié)點(diǎn)
訪問權(quán)限:目錄節(jié)點(diǎn) ACL(訪問權(quán)限)
perms:ALL豹储、READ、WRITE淘这、CREATE、DELETE巩剖、ADMIN
id:標(biāo)識(shí)了訪問目錄節(jié)點(diǎn)的身份列表铝穷。默認(rèn):ANYONE_ID_UNSAFE = new Id("world", "anyone") 和 AUTH_IDS = new Id("auth", "") 分別表示任何人都可以訪問和創(chuàng)建者擁有訪問權(quán)限
基礎(chǔ)概念:
Watcher 觀察者模式:
可以監(jiān)控目錄節(jié)點(diǎn)的數(shù)據(jù)變化以及子目錄的變化,一旦這些狀態(tài)發(fā)生變化佳魔,服務(wù)器就會(huì)通知所有設(shè)置在這個(gè)目錄節(jié)點(diǎn)上的 Watcher
KeeperState:
Disconnected
NoSyncConnected
SyncConnected
AuthFailed
ConnectedReadOnly
SaslAuthenticated
Expired
EventType node變更
None
NodeCreated
NodeDeleted
NodeDataChanged曙聂,就算設(shè)置重復(fù)的數(shù)據(jù)也會(huì)有該事件
NodeChildrenChanged
AsyncCallback
DataCallback getData
ACLCallback setACL
ChildrenCallback getChildren
StatCallback exisit
StringCallback
VoidCallback
Children2Callback
Zookeeper一致性協(xié)議Zab,保證應(yīng)用程序的HA和一致性
同類算法:分布式一致性算法(二階段提交、paxos算法鞠鲜、raft算法)
場(chǎng)景使用:
1.存儲(chǔ)公共配置信息
1.集群中A機(jī)器創(chuàng)建一個(gè)PERSISTENT類型的/data目錄宁脊,如下:zk.create("/testRootPath", "testRootData".getBytes(), Ids.OPEN_ACL_UNSAFE,
CreateMode.PERSISTENT);
2.其他機(jī)器在getData的時(shí)候添加watcher監(jiān)控,一旦/data節(jié)點(diǎn)下的數(shù)據(jù)發(fā)送變化贤姆,則zookeeper服務(wù)器通知所有注冊(cè)上來的觀察者榆苞,回調(diào)它們的watcher方法,從而實(shí)現(xiàn)配置統(tǒng)一
2.集群管理
1.master創(chuàng)建一個(gè)root節(jié)點(diǎn)霞捡,并且調(diào)用getChild("/root",true)方法,設(shè)置對(duì)root目錄子節(jié)點(diǎn)的監(jiān)控
2.datanode create 一個(gè)EPHEMERAL節(jié)點(diǎn)
3.觸發(fā)master的Watcher process方法調(diào)用坐漏,在Globl配置中添加datanode ip或其他信息
3.master選主
由于master可能要做些特別的事情,比如發(fā)放任務(wù)給task節(jié)點(diǎn)碧信,那么如何選出一臺(tái)master節(jié)點(diǎn)(每臺(tái)機(jī)器創(chuàng)建一個(gè)EPHEMERAL_SEQUENTIAL節(jié)點(diǎn)赊琳,然后zookeeper把seq最低的節(jié)點(diǎn)選舉為master,當(dāng)節(jié)點(diǎn)斷開后,再從中選seq最低的節(jié)點(diǎn)為master)
4.提供分布式同步支持(分布式鎖等功能)