最近酒来,經理讓每個小組成員做技術分享谈飒,我領到的任務是zookeeper岂座,特此記錄。
一杭措、 zookeeper的來源
分布式的產生——分布式數據一致性問題费什。(分布式節(jié)點越多,越難達到一致性)
Zookeeper產生的目的 :就是解決分布式數據一致性的問題手素。
eg:Hadoop安裝的時候鸳址,namenode也存在單點故障的問題,namenode可以配置多個泉懦,只有一個active的稿黍,剩下的都是standby的。standby可以無縫銜接active崩哩,保證集群正常運行巡球,數據不丟失。
如果standby想要無縫連接邓嘹,必須實時和active元數據保持一致酣栈。
那如何保持呢?定期拷貝汹押?不可能矿筝!會出現數據延遲或者丟失的問題。
最好出現一個第三方平臺棚贾,這個平臺就是解決數據同步問題——zookeeper就做這樣的事情窖维。
二、 zookeeper是什么妙痹?
是一個分布式的铸史、開放源碼的分布式應用程序協(xié)調服務,是Google的chubby的一個開源的實現细诸。
它提供了簡單原始的功能沛贪,分布式應用可以基于它實現更高級的服務,比如分布式同步震贵、配置管理、集群管理水评、集群管理猩系、隊列管理。
三中燥、 zookeeper的安裝
有三種模式:
單機模式(在自己windows電腦上)
集群模式(有真實的幾臺電腦集群)
偽集群模式(在虛擬機上)
安裝步驟:http://www.cnblogs.com/jxwch/p/6433310.html
/conf/zoo.cfg文件? 配置文件
命令:
啟動:zkServer.sh start
停止:zkServer.sh stop
查看狀態(tài):zkServer.sh status
四寇甸、 zookeeper的總體架構
主從結構(選舉機制)
主——leader
從——follower
//todo
五、 zookeeper的文件系統(tǒng)
兩個核心:文件系統(tǒng),監(jiān)聽機制
1) 文件系統(tǒng)
1. Zookeeper的文件系統(tǒng)類似于Linux拿霉,根節(jié)點是/
2. Zookeeper的文件系統(tǒng)的尋址只能通過絕對路徑吟秩,不能通過相對路徑。從根目錄開始(所有的選址)eg: get /new03
3. linux下的路徑可能有文件绽淘,可能是目錄涵防。
但是在zookeeper中不存在文件,也不存在目錄沪铭,
但是既有文件的功能(存東西)壮池,又有目錄的功能(有路徑),叫znode杀怠。
它既不是文件椰憋,又不是目錄,但是兩者的功能都有了赔退。
4. znode的分類:
按照生命周期:可以分為持久的znode和臨時的znode橙依。
二者的區(qū)別:臨時節(jié)點在當前會話結束時,自動刪除硕旗;持久節(jié)點只有用戶手動刪除才能被刪除票编。
按有無編號:
可以分為4種:
持久無編號節(jié)點;
持久有編號節(jié)點卵渴;
臨時無編號節(jié)點慧域;
臨時有編號節(jié)點。
注意:
1.“有編號”的編號是由父節(jié)點維護的浪读,同一個父節(jié)點維護的編號會順序增加昔榴,只要在相同的父節(jié)點下創(chuàng)建子節(jié)點,不管這個節(jié)點有無編號碘橘,都會順序增加編號(只是無編號的不顯示而已)
2.有編號的可以反復創(chuàng)建同名節(jié)點互订,每次都會自動添加一個順序的編號。無編號的節(jié)點只能創(chuàng)建一次痘拆。
5. 臨時節(jié)點不能有子節(jié)點仰禽。
有子節(jié)點的節(jié)點一定是持久節(jié)點;
沒有子節(jié)點的節(jié)點可能是永久節(jié)點纺蛆,也可能是臨時節(jié)點.
6. 有幾個zookeeper節(jié)點吐葵,數據就會保存幾份,但是這幾份數據是完全一樣的桥氏。
eg温峭;Master,Slave1字支,Slave2這三臺機器上的zk數據是完全一樣的凤藏。
7. 每個znode上存儲的數據最大不要超過1M奸忽,最好不要超過1kb。
原因:
1. znode上存儲的數據量越大揖庄,一致性越難維護(網絡)栗菜。
2. 理論上只存儲核心數據就可以了,znode的一般存儲狀態(tài)信息0和1蹄梢。
8. znode上可以添加監(jiān)聽
監(jiān)聽添加的地方——znode上
監(jiān)聽:監(jiān)測znode的狀態(tài)(一舉一動)疙筹,包括數據改變/節(jié)點添加刪除
2) 監(jiān)聽機制
監(jiān)聽就是對數據進行監(jiān)控,zookeeper的監(jiān)聽對象是znode检号,會對znode的數據變化添加監(jiān)聽腌歉。通過監(jiān)聽機制,監(jiān)聽文件系統(tǒng)的數據變化(包括數據內容的變化/文件結果的變化)
監(jiān)聽事件:
nodeDataChanged? 節(jié)點數據(內容)的改變
nodeCreate 節(jié)點創(chuàng)建事件
nodeDelete? ? ? 節(jié)點刪除事件
nodeChildrenChanged? 子節(jié)點變化事件
用戶對哪個節(jié)點的數據變化感興趣齐苛,那么就在這個節(jié)點上添加監(jiān)聽(注冊監(jiān)聽)翘盖,一旦數據發(fā)生改變就會觸發(fā)監(jiān)聽。
注冊監(jiān)聽:
Ls : 顯示子節(jié)點:子節(jié)點的變化(創(chuàng)建凹蜂,刪除)
get/getData : 監(jiān)聽節(jié)點數據內容:節(jié)點數據內容發(fā)生改變
exist
觸發(fā)監(jiān)聽:
create
delete
set path data
六馍驯、zookeeper的shell
Ls /
Rmr path
Delete path
Stat path
Get path
Create [-e] [-s] znode節(jié)點 內容
-s:序號 sequential
-e:臨時的 epherneral
七、zookeeper的api
在eclipse中安裝zookeeper的可視化插件 zookeeper eclipse plugins 可以在help中下載
并導入zookeeper的jar包
public class TestZooConnection {
public static void main(String[] args) throws IOException {
ZooKeeper zk = new ZooKeeper("Master:2181", 5000, null);
System.out.println(zk);
}
}