zookeeper介紹_第1頁
zookeeper介紹_第2頁
zookeeper介紹_第3頁
zookeeper介紹_第4頁
zookeeper介紹_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Zookeeper了解認識使用深入ZooKeeper認識ZooKeeperZooKeeper是一個分布式的小文件存儲系統(tǒng)。前身是Apache Hadoop的一個組件,被拆分為一個Hadoop的獨立子項目。認識ZooKeeperZooKeeper是一個為分布式應用程序提供高性能協(xié)調(diào)服務的工具集合。它可以應用在一些需要提供統(tǒng)一協(xié)調(diào)服務的場景中,例如命名、配置管理、同步和組服務等。而在我們的場景中,它被作為一個協(xié)調(diào)分布式環(huán)境中各子系統(tǒng)之間共享狀態(tài)數(shù)據(jù)的基礎組件。認識ZooKeeperHbaseYahooMateQDubboZooKeeper文件系統(tǒng)czxid:節(jié)點創(chuàng)建時的zxidmzxid:節(jié)點最新

2、一次更新發(fā)生時的zxidctime:節(jié)點創(chuàng)建時的時間戳mtime:節(jié)點最新一次更新發(fā)生時的時間戳version:節(jié)點數(shù)據(jù)的更新次數(shù)cversion:其子節(jié)點的更新次數(shù)aversion:節(jié)點ACL(授權(quán)信息)的更新次數(shù)ephemeralOwner: ephemeral節(jié)點所屬sessiondataLength:節(jié)點數(shù)據(jù)的字節(jié)數(shù)numChildren:子節(jié)點個數(shù)zxidznode節(jié)點的狀態(tài)信息中包含czxid和mzxid, 那么什么是zxid呢?ZooKeeper狀態(tài)的每一次改變, 都對應著一個遞增的Transaction id, 該id稱為zxid. 由于zxid的遞增性質(zhì), 如果zxid1小于

3、zxid2, 那么zxid1肯定先于zxid2發(fā)生. 創(chuàng)建任意節(jié)點, 或者更新任意節(jié)點的數(shù)據(jù), 或者刪除任意節(jié)點, 都會導致Zookeeper狀態(tài)發(fā)生改變, 從而導致zxid的值增加.ZooKeeper文件系統(tǒng)節(jié)點類型節(jié)點類型persistentpersistent節(jié)點不和特定的session綁定, 不會隨著創(chuàng)建該節(jié)點的session的結(jié)束而消失, 而是一直存在, 除非該節(jié)點被顯式刪除.ephemeralephemeral節(jié)點是臨時性的, 如果創(chuàng)建該節(jié)點的session結(jié)束了, 該節(jié)點就會被自動刪除. ephemeral節(jié)點不能擁有子節(jié)點. 雖然ephemeral節(jié)點與創(chuàng)建它的session綁

4、定, 但只要該該節(jié)點沒有被刪除, 其他session就可以讀寫該節(jié)點中關(guān)聯(lián)的數(shù)據(jù). 使用-e參數(shù)指定創(chuàng)建ephemeral節(jié)點.sequencesequence并非節(jié)點類型中的一種. sequence節(jié)點既可以是ephemeral的, 也可以是persistent的. 創(chuàng)建sequence節(jié)點時, ZooKeeper server會在指定的節(jié)點名稱后加上一個數(shù)字序列, 該數(shù)字序列是遞增的. 因此可以多次創(chuàng)建相同的sequence節(jié)點, 而得到不同的節(jié)點. 使用-s參數(shù)指定創(chuàng)建sequence節(jié)點.ZooKeeper文件系統(tǒng)簡單命令簡單命令zk: localhost:2181(CONNECTED

5、) 1 ls /job, tmp, hbase, job2, zookeeperzk: localhost:2181(CONNECTED) 2 create -e /xief dataCreated /xiefzk: localhost:2181(CONNECTED) 5 delete /xiefZooKeeper文件系統(tǒng)簡單命令簡單命令zk: localhost:2181(CONNECTED) 3 get /xiefdatacZxid = 0 x50000001cctime = Fri Apr 18 17:04:38 CST 2014mZxid = 0 x50000001cmtime = F

6、ri Apr 18 17:04:38 CST 2014pZxid = 0 x50000001ccversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0 x245725533760000dataLength = 4numChildren = 0ZooKeeper文件系統(tǒng)簡單命令簡單命令zk: localhost:2181(CONNECTED) 4 set /xief data2cZxid = 0 x50000001cctime = Fri Apr 18 17:04:38 CST 2014mZxid = 0 x50000001dmtim

7、e = Fri Apr 18 17:06:46 CST 2014pZxid = 0 x50000001ccversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0 x245725533760000dataLength = 5numChildren = 0Zookeeper APIStat exists(String path, boolean watch); 是否存在節(jié)點:watch參數(shù)用于指定是否監(jiān)聽path node的創(chuàng)建, 刪除事件, 以及數(shù)據(jù)更新事件. 如果該node存在, 則返回該node的狀態(tài)信息, 否則返回null.St

8、ring create(String path, byte data, List acl, CreateMode createMode); 創(chuàng)建節(jié)點:path:znode的路徑,data:與znode關(guān)聯(lián)的數(shù)據(jù),acl:指定權(quán)限信息, 如果不想指定權(quán)限, 可以傳入Ids.OPEN_ACL_UNSAFE. createMode:指定znode類型. CreateMode是一個枚舉類void getChildren(String path, Watcher watcher, ChildrenCallback cb, Object ctx)獲取子節(jié)點: watch參數(shù)用于指定是否監(jiān)聽path nod

9、e的子node的增加和刪除事件, 以及path node本身的刪除事件void getData(String path, Watcher watcher, DataCallback cb, Object ctx)獲取節(jié)點數(shù)據(jù):watch參數(shù)用于指定是否監(jiān)聽path node的刪除事件, 以及數(shù)據(jù)更新事件, 注意, 不監(jiān)聽path node的創(chuàng)建事件, 因為如果path node不存在, 該方法將拋出KeeperException.NoNodeException異常.stat參數(shù)是個傳出參數(shù), getData方法會將path node的狀態(tài)信息設置到該參數(shù)中.void setData(Strin

10、g path, byte data, int version, StatCallback cb, Object ctx) 設置節(jié)點數(shù)據(jù): data為待更新的數(shù)據(jù).version參數(shù)指定要更新的數(shù)據(jù)的版本, 如果version和真實的版本不同, 更新操作將失敗. 指定version為-1則忽略版本檢查.返回path node的狀態(tài)信息.void delete(final String path, int version, VoidCallback cb, Object ctx)刪除節(jié)點: version參數(shù)的作用同setData方法.Zookeeper APIvoid exists(final

11、String path, Watcher watcher, StatCallback cb, Object ctx) 是否存在節(jié)點:watch參數(shù)用于指定是否監(jiān)聽path node的創(chuàng)建, 刪除事件, 以及數(shù)據(jù)更新事件. 如果該node存在, 則返回該node的狀態(tài)信息, 否則返回null.void create(final String path, byte data, List acl, CreateMode createMode, StringCallback cb, Object ctx)創(chuàng)建節(jié)點:path:znode的路徑,data:與znode關(guān)聯(lián)的數(shù)據(jù),acl:指定權(quán)限信息, 如

12、果不想指定權(quán)限, 可以傳入Ids.OPEN_ACL_UNSAFE. createMode:指定znode類型. CreateMode是一個枚舉類List getChildren(String path, boolean watch); 獲取子節(jié)點: watch參數(shù)用于指定是否監(jiān)聽path node的子node的增加和刪除事件, 以及path node本身的刪除事件 byte getData(String path, boolean watch, Stat stat); 獲取節(jié)點數(shù)據(jù):watch參數(shù)用于指定是否監(jiān)聽path node的刪除事件, 以及數(shù)據(jù)更新事件, 注意, 不監(jiān)聽path nod

13、e的創(chuàng)建事件, 因為如果path node不存在, 該方法將拋出KeeperException.NoNodeException異常.stat參數(shù)是個傳出參數(shù), getData方法會將path node的狀態(tài)信息設置到該參數(shù)中.Stat setData(final String path, byte data, int version); 設置節(jié)點數(shù)據(jù): data為待更新的數(shù)據(jù).version參數(shù)指定要更新的數(shù)據(jù)的版本, 如果version和真實的版本不同, 更新操作將失敗. 指定version為-1則忽略版本檢查.返回path node的狀態(tài)信息.void delete(final Strin

14、g path, int version); 刪除節(jié)點: version參數(shù)的作用同setData方法.Zookeeper API訪問控制APIList getACL(final String path, Stat stat)void getACL(final String path, Stat stat, ACLCallback cb, Object ctx)Stat setACL(final String path, List acl, int version)void setACL(final String path, List acl, int version, StatCallback

15、 cb, Object ctx)同步同步APIvoid sync(final String path, VoidCallback cb, Object ctx)Watch機制監(jiān)聽事件 新增 更新 刪除 子節(jié)點變化Watch機制event For “/path”event For “/path/child”create(“/path”)EventType.NodeCreatedNAdelete(“/path”)EventType.NodeDeletedNAsetData(“/path”)EventType.NodeDataChangedNAcreate(“/path/child”)EventTy

16、pe.NodeChildrenChangedEventType.NodeCreateddelete(“/path/child”)EventType.NodeChildrenChangedEventType.NodeDeletedsetData(“/path/child”)NAEventType.NodeDataChangedWatch機制“/path”“/path/child”existsgetData getChildren existsgetData getChildrencreate(“/path”)delete(“/path”)setData(“/path”)create(“/path

17、/child”)delete(“/path/child”)setData(“/path/child”)ZooKeeper部署-單機模式zoo.cfg配置配置項配置項示例示例說明說明clientPortclientPort=2181服務的監(jiān)聽端口dataDirdataDir=/home/hadoop/zookeeper用于存放內(nèi)存數(shù)據(jù)庫快照的文件夾tickTimetickTime=2000心跳時間dataLogDirdataLogDir=/home/hadoop/zookeeper單獨設置transaction log的目錄ZooKeeper部署配置項配置項示例示例說明說明globalOutst

18、andingLimitglobalOutstandingLimit=1000client請求隊列的最大長度preAllocSizepreAllocSize=65536預分配的Transaction log空間為block個proAllocSize KB,默認block為64MsnapCountsnapCount=100000在snapCount個snapshot后寫一次transaction log,默認值是100,000traceFiletraceFile=1用于記錄請求的log,打開會影響性能maxClientCnxnsmaxClientCnxns=60 一個client與server上最

19、大的socket鏈接數(shù)clientPortAddressclientPortAddress=192.168.1.1設置指定的client ip以及端口minSessionTimeoutminSessionTimeout=5000最小的客戶端session超時時間,默認值為2個tickTime,單位是毫秒maxSessionTimeoutminSessionTimeout=5000最大的客戶端session超時時間,默認值為20個tickTime,單位是毫秒autopurge.snapRetainCountautopurge.snapRetainCount=3用于清理“過期”的snapshot文

20、件和其相應的txn log fileautopurge.purgeIntervalautopurge.purgeInterval=1清理任務被處罰的時間間隔,單位:hoursjute.maxbufferjute.maxbuffer=1024每個節(jié)點最大數(shù)據(jù)量,是默認是1M。forceSyncforceSync=true這個參數(shù)確定了是否需要在事務日志提交的時候調(diào)用FileChannel.force來保證數(shù)據(jù)完全同步到磁盤ZooKeeper部署hadoopcentos-1 zookeeper-3.4.5-cdh4.3.0$ bin/./zkServer.sh startJMX enabled b

21、y defaultUsing config: /export/home/tools/zookeeper-3.4.5-cdh4.3.0/bin/./conf/zoo.cfgStarting zookeeper . STARTEDhadoopcentos-2 zookeeper-3.4.5-cdh4.3.0$ bin/./zkServer.sh statusJMX enabled by defaultUsing config: /export/home/tools/zookeeper-3.4.5-cdh4.3.0/bin/./conf/zoo.cfgMode: standaloneZooKeepe

22、r部署Zookeeper集群模式ZooKeeper部署-集群模式配置項配置項示例示例說明說明syncLimitsyncLimit=2多少個tickTime內(nèi),允許follower同步initLimitinitLimit=5多少個心跳時間內(nèi),允許其他server連接并初始化數(shù)據(jù)electionAlgelectionAlg=3default 3.使用何種選舉方式,(0,1,2,3),“0”表示使用原生的UDP(LeaderElection),“1”表示使用非授權(quán)UDP,“2”表示授權(quán)UDP,“3”基于TCP的快速選舉(FastLeaderElection)peerType peerType=obs

23、erverobserver,participantleaderServesleaderServes=yesleader是否接受client請求cnxTimeoutcnxTimeout=5000leader選舉時,socket鏈接打開的時長。只有在elctionArg為3時生效。server.sid = hostname:followingPort:electionPortserver.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890 server.4=127.0.0.1:2891:389

24、1:observerZK 節(jié)點列表,格式:server.sid = hostname:followingPort:electionPort,如果采用UDP方式,electionPort可以不用設置。Leader選舉成功之后,Follower可以在followingPort上與leader建立鏈接,以便此后進行各種通訊.比如server.1為Leader,那么其他機器將會在127.0.0.1:2888上建立鏈接. /electionPort為Leader選舉的端口,當集群處于危險期時,每個server都會根據(jù)server列表中配置,和其他server的electionPoint建立鏈接,并在此后

25、通過此連接發(fā)送選舉信息. group.x=nnnnn:nnnnnweight.x=nnnnngroup.1=1:2 group.2=4:5 weight.1=1 weight.2=1 weight.3=1 weight.4=0.8對機器分組和權(quán)重設置ZooKeeper部署hadoopcentos-1 zookeeper-3.4.5-cdh4.3.0$ bin/./zkServer.sh startJMX enabled by defaultUsing config: /export/home/tools/zookeeper-3.4.5-cdh4.3.0/bin/./conf/zoo.cfgSt

26、arting zookeeper . STARTEDhadoopcentos-2 zookeeper-3.4.5-cdh4.3.0$ bin/./zkServer.sh statusJMX enabled by defaultUsing config: /export/home/tools/zookeeper-3.4.5-cdh4.3.0/bin/./conf/zoo.cfgMode: leaderhadoopcentos-2 zookeeper-3.4.5-cdh4.3.0$ bin/./zkServer.sh statusJMX enabled by defaultUsing config

27、: /export/home/tools/zookeeper-3.4.5-cdh4.3.0/bin/./conf/zoo.cfgMode: followerZooKeeper部署-集群模式三種角色LeaderFollowerObserverZooKeeper部署-集群模式Leader1.恢復數(shù)據(jù)2.維持與Learner的心跳3.接收Learner寫請求4.接收Client的讀寫請求ZooKeeper部署-集群模式Follower1.向Leader發(fā)送請求2.接收Leader消息并進行處理3.接收Client的請求,如果為寫請求,發(fā)送給Leader進行投票ZooKeeper特性 簡單ZooKee

28、per核心是一個精簡的文件系統(tǒng),它提供了一些簡單的文件操作以及附加的功能,例如排序和通知。 易表達ZooKeeper的數(shù)據(jù)結(jié)構(gòu)原型是一棵znode樹(類似Linux的文件系統(tǒng)),并且它們是一些已經(jīng)被構(gòu)建好的塊,可以用來構(gòu)建大型的協(xié)作數(shù)據(jù)結(jié)構(gòu)和協(xié)議。 高可用性ZooKeeper可以運行在一組服務器上,同時它們被設計成高可用性,為你的應用程序避免單點故障。 松耦合交互ZooKeeper提供的Watcher機制使得各客戶端與服務器的交互變得松耦合,每個客戶端無需知曉其他客戶端的存在,就可以和其他客戶端進行數(shù)據(jù)交互。 豐富的APIZooKeeper為開發(fā)人員提供了一套豐富的API,減輕了開發(fā)人員編寫通用協(xié)議的負擔。Zookeeper使用場景命名服務Zookeeper使用場景配置管理發(fā)布與訂閱模型,即所謂的配置中心,顧名思義就是發(fā)布者將數(shù)據(jù)發(fā)布到Z

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論