1.ZooKeeper是什么?
ZooKeeper是一個分布式的骡和,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)樊销,是Google的Chubby一個開源的實現(xiàn),它是集群的管理者声诸,監(jiān)視著集群中各個節(jié)點的狀態(tài)根據(jù)節(jié)點提交的反饋進行下一步合理操作。最終退盯,將簡單易用的接口和性能高效彼乌、功能穩(wěn)定的系統(tǒng)提供給用戶。
2.ZooKeeper提供了什么渊迁?
1)文件系統(tǒng)
2)通知機制
3.Zookeeper文件系統(tǒng)
每個子目錄項如 NameService 都被稱作為znode慰照,和文件系統(tǒng)一樣,我們能夠自由的增加琉朽、刪除znode毒租,在一個znode下增加、刪除子znode箱叁,唯一的不同在于znode是可以存儲數(shù)據(jù)的墅垮。?
有四種類型的znode:?
1惕医、PERSISTENT-持久化目錄節(jié)點?
客戶端與zookeeper斷開連接后,該節(jié)點依舊存在?
2算色、PERSISTENT_SEQUENTIAL-持久化順序編號目錄節(jié)點?
客戶端與zookeeper斷開連接后抬伺,該節(jié)點依舊存在,只是Zookeeper給該節(jié)點名稱進行順序編號?
3灾梦、EPHEMERAL-臨時目錄節(jié)點?
客戶端與zookeeper斷開連接后峡钓,該節(jié)點被刪除?
4、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節(jié)點?
客戶端與zookeeper斷開連接后若河,該節(jié)點被刪除能岩,只是Zookeeper給該節(jié)點名稱進行順序編號?
4.Zookeeper通知機制
客戶端注冊監(jiān)聽它關(guān)心的目錄節(jié)點,當目錄節(jié)點發(fā)生變化(數(shù)據(jù)改變萧福、被刪除拉鹃、子目錄節(jié)點增加刪除)時,zookeeper會通知客戶端统锤。
5.Zookeeper能做什么毛俏?
1.命名服務(wù)? ?2.配置管理? ?3.集群管理? ?4.分布式鎖??5.隊列管理
6.Zookeeper命名服務(wù)
在zookeeper的文件系統(tǒng)里創(chuàng)建一個目錄,即有唯一的path饲窿。在我們使用tborg無法確定上游程序的部署機器時即可與下游程序約定好path煌寇,通過path即能互相探索發(fā)現(xiàn)。
7.Zookeeper的配置管理
程序總是需要配置的逾雄,如果程序分散部署在多臺機器上阀溶,要逐個改變配置就變得困難。現(xiàn)在把這些配置全部放到zookeeper上去鸦泳,保存在 Zookeeper 的某個目錄節(jié)點中银锻,然后所有相關(guān)應(yīng)用程序?qū)@個目錄節(jié)點進行監(jiān)聽,一旦配置信息發(fā)生變化做鹰,每個應(yīng)用程序就會收到 Zookeeper 的通知击纬,然后從 Zookeeper 獲取新的配置信息應(yīng)用到系統(tǒng)中就好
8.Zookeeper集群管理
所謂集群管理無在乎兩點:是否有機器退出和加入、選舉master钾麸。?
對于第一點更振,所有機器約定在父目錄GroupMembers下創(chuàng)建臨時目錄節(jié)點,然后監(jiān)聽父目錄節(jié)點的子節(jié)點變化消息饭尝。一旦有機器掛掉肯腕,該機器與 zookeeper的連接斷開,其所創(chuàng)建的臨時目錄節(jié)點被刪除钥平,所有其他機器都收到通知:某個兄弟目錄被刪除实撒,于是,所有人都知道:它上船了。
新機器加入也是類似知态,所有機器收到通知:新兄弟目錄加入捷兰,highcount又有了,對于第二點肴甸,我們稍微改變一下寂殉,所有機器創(chuàng)建臨時順序編號目錄節(jié)點,每次選取編號最小的機器作為master就好原在。
9.Zookeeper分布式鎖
有了zookeeper的一致性文件系統(tǒng)友扰,鎖的問題變得容易。鎖服務(wù)可以分為兩類庶柿,一個是保持獨占村怪,另一個是控制時序。?
對于第一類浮庐,我們將zookeeper上的一個znode看作是一把鎖甚负,通過createznode的方式來實現(xiàn)。所有客戶端都去創(chuàng)建 /distribute_lock 節(jié)點审残,最終成功創(chuàng)建的那個客戶端也即擁有了這把鎖梭域。用完刪除掉自己創(chuàng)建的distribute_lock 節(jié)點就釋放出鎖。?
對于第二類搅轿, /distribute_lock 已經(jīng)預先存在病涨,所有客戶端在它下面創(chuàng)建臨時順序編號目錄節(jié)點,和選master一樣璧坟,編號最小的獲得鎖既穆,用完刪除,依次方便雀鹃。
10.Zookeeper隊列管理
兩種類型的隊列:
1幻工、同步隊列,當一個隊列的成員都聚齊時黎茎,這個隊列才可用囊颅,否則一直等待所有成員到達。?
2傅瞻、隊列按照 FIFO 方式進行入隊和出隊操作迁酸。?
第一類,在約定目錄下創(chuàng)建臨時目錄節(jié)點俭正,監(jiān)聽節(jié)點數(shù)目是否是我們要求的數(shù)目。?
第二類焙畔,和分布式鎖服務(wù)中的控制時序場景基本原理一致掸读,入列有編號,出列按編號。
11.分布式與數(shù)據(jù)復制?
Zookeeper作為一個集群提供一致的數(shù)據(jù)服務(wù)儿惫,自然澡罚,它要在所有機器間做數(shù)據(jù)復制。數(shù)據(jù)復制的好處:?
1肾请、容錯:一個節(jié)點出錯留搔,不致于讓整個系統(tǒng)停止工作,別的節(jié)點可以接管它的工作铛铁;?
2隔显、提高系統(tǒng)的擴展能力 :把負載分布到多個節(jié)點上,或者增加節(jié)點來提高系統(tǒng)的負載能力饵逐;?
3括眠、提高性能:讓客戶端本地訪問就近的節(jié)點,提高用戶訪問速度倍权。?
從客戶端讀寫訪問的透明度來看掷豺,數(shù)據(jù)復制集群系統(tǒng)分下面兩種:?
1、寫主(WriteMaster) :對數(shù)據(jù)的修改提交給指定的節(jié)點薄声。讀無此限制当船,可以讀取任何一個節(jié)點。這種情況下客戶端需要對讀與寫進行區(qū)別默辨,俗稱讀寫分離德频;?
2、寫任意(Write Any):對數(shù)據(jù)的修改可提交給任意的節(jié)點廓奕,跟讀一樣抱婉。這種情況下,客戶端對集群節(jié)點的角色與變化透明桌粉。
對zookeeper來說蒸绩,它采用的方式是寫任意。通過增加機器铃肯,它的讀吞吐能力和響應(yīng)能力擴展性非常好患亿,而寫,隨著機器的增多吞吐能力肯定下降(這也是它建立observer的原因)押逼,而響應(yīng)能力則取決于具體實現(xiàn)方式步藕,是延遲復制保持最終一致性,還是立即復制快速響應(yīng)挑格。
http://www.cnblogs.com/felixzh/p/5869212.html