zookeeper簡介_第1頁
zookeeper簡介_第2頁
zookeeper簡介_第3頁
zookeeper簡介_第4頁
zookeeper簡介_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Zookeeper簡介Zookeeper簡介 什么是Zookeeper 設計目標 Zookeeper server組成 數據模型 常用方法 典型應用場景 指令匯總Zookeeper簡介 什么是ZookeeperZK是一個高效的分布式協調服務,它暴露了一些公用服務,比如命名/配置管理/同步控制/群組服務等。我們可以使用ZK來實現比如達成共識/集團管理/leader選舉等。Zookeeper簡介 設計目標簡單:ZK中的namespace組織結構類似與標準的文件系統,通過這些共享的有層次的namespace來互相協調分布式中的多個進程,這些namespace由ZNodes組成,ZK數據被保存在內存中

2、,這也意味著ZK將可以達到較高的吞吐量/較低的延遲。ZK的核心目標就是高性能,高可用,嚴格有序存取。高性能標志著ZK可以被使用在大規模分布式環境中,高可用標志著ZK避免單點故障,具有較強的容錯能力;嚴格有序(strict ordering)意味著客戶端可以實現復雜的同步。 Zookeeper簡介 設計目標復制:ZK的數據將會在ZK Cluster中的每臺機器上協作復制(備份),構成ZK服務的機器必須能夠互相感知對方。它們保持了一個內存視圖狀態(in-memory image of state),同時伴隨這tnx log和snapshot的持久存儲。只要大部分server有效,那么ZK 服務也是

3、有效的。客戶端只與一個zk server建立鏈接,client通過建立的TCP連接來進行請求/響應/獲取事件/發送心跳等。如果此TCP連接失效,client將會嘗試連接其他的ZK server。 Zookeeper簡介 設計目標全序性:對于每個update請求,ZK(leader)都會為其生成唯一的Zid來表示其事務的順序,接下來的操作可以使用zid的順序實現同步原語(隊列)。高效快速:ZK在“讀主導”的應用中表現的非常的優秀。ZK應用可以運行在數臺機器上,并且在read遠大與write的場景中,是非常適合的,通常這個比例為10:1. Zookeeper簡介 Zookeeper server組

4、成ZK server根據其身份特性分為三種:leader,Follower,Observer,其中Follower和Observer又統稱Learner(學習者)。 Leader:負責客戶端的writer類型請求 Follower:負責客戶端的reader類型請求,參與leader選舉等 Observer:特殊的“Follower”,其可以接受客戶端reader請求,但不參與選舉。(擴容系統支撐能力,提高了讀取速度。因為它不接受任何同步的寫入請求,只負責與leader同步數據)Zookeeper簡介 數據模型Zookeeper 會維護一個具有層次關系的數據結構,它非常類似于一個標準的文件系統Z

5、ookeeper簡介 數據模型1、每個子目錄項如 NameService 都被稱作為 znode,這個 znode 是被它所在的路徑唯一標識,如 Server1 這個 znode 的標識為 /NameService/Server12、znode 可以有子節點目錄,并且每個 znode 可以存儲數據,注意 EPHEMERAL 類型的目錄節點不能有子節點目錄3、znode 是有版本的,每個 znode 中存儲的數據可以有多個版本,也就是一個訪問路徑中可以存儲多份數據 Zookeeper簡介 數據模型4、znode 可以是臨時節點,一旦創建這個 znode 的客戶端與服務器失去聯系,這個 znode

6、 也將自動刪除,Zookeeper 的客戶端和服務器通信采用長連接方式,每個客戶端和服務器通過心跳來保持連接,這個連接狀態稱為 session,如果 znode 是臨時節點,這個 session 失效,znode 也就刪除了5、znode 的目錄名可以自動編號,如 App1 已經存在,再創建的話,將會自動命名為 App2 Zookeeper簡介 數據模型6、 znode 可以被監控,包括這個目錄節點中存儲的數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,這個是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于這個特性實現的,后面在典型的應用場景中會有實例

7、介紹 Zookeeper簡介 常用方法 Zookeeper簡介 常用方法 Zookeeper簡介 典型應用場景Zookeeper 從設計模式角度來看,是一個基于觀察者模式設計的分布式服務管理框架,它負責存儲和管理大家都關心的數據,然后接受觀察者的注冊,一旦這些數據的狀態發生 變化,Zookeeper 就將負責通知已經在 Zookeeper 上注冊的那些觀察者做出相應的反應,從而實現集群中類似 Master/Slave 管理模式。 統一命名服務(Name Service) 配置管理(Configuration Management) 集群管理(Group Membership) 共享鎖(Lock

8、s) 隊列管理Zookeeper簡介 統一命名服務(Name Service)分布式應用中,通常需要有一套完整的命名規則,既能夠產生唯一的名稱又便于人識別和記住,通常情況下用樹形的名稱結構是一個理想的選擇,樹形的名稱 結構是一個有層次的目錄結構,既對人友好又不會重復。說到這里你可能想到了 JNDI,沒錯 Zookeeper 的 Name Service 與 JNDI 能夠完成的功能是差不多的,它們都是將有層次的目錄結構關聯到一定資源上,但是 Zookeeper 的 Name Service 更加是廣泛意義上的關聯,也許你并不需要將名稱關聯到特定資源上,你可能只需要一個不會重復名稱,就像數據庫中

9、產生一個唯一的數字主鍵一樣。Name Service 已經是 Zookeeper 內置的功能,你只要調用 Zookeeper 的 API 就能實現。如調用 create 接口就可以很容易創建一個目錄節點。Zookeeper簡介 配置管理(Configuration Management)配置的管理在分布式應用環境中很常見,例如同一個應用系統需要多臺 PC Server 運行,但是它們運行的應用系統的某些配置項是相同的,如果要修改這些相同的配置項,那么就必須同時修改每臺運行這個應用系統的 PC Server,這樣非常麻煩而且容易出錯。像這樣的配置信息完全可以交給 Zookeeper 來管理,將配

10、置信息保存在 Zookeeper 的某個目錄節點中,然后將所有需要修改的應用機器監控配置信息的狀態,一旦配置信息發生變化,每臺應用機器就會收到 Zookeeper 的通知,然后從 Zookeeper 獲取新的配置信息應用到系統中。Zookeeper簡介 配置管理(Configuration Management)Zookeeper簡介 集群管理(Group Membership) Zookeeper 能夠很容易的實現集群管理的功能,如有多臺 Server 組成一個服務集群,那么必須要一個“總管”知道當前集群中每臺機器的服務狀態,一旦有機器不能提供服務,集群中其它集群必須知道,從而做出調整重新分

11、配服 務策略。同樣當增加集群的服務能力時,就會增加一臺或多臺 Server,同樣也必須讓“總管”知道。 Zookeeper 不僅能夠幫你維護當前的集群中機器的服務狀態,而且能夠幫你選出一個“總管”,讓這個總管來管理集群,這就是 Zookeeper 的另一個功能 Leader Election。Zookeeper簡介 集群管理(Group Membership)-實現 它們的實現方式都是在 Zookeeper 上創建一個 EPHEMERAL 類型的目錄節點,然后每個 Server 在它們創建目錄節點的父目錄節點上調用 getChildren(String path, boolean watch)

12、 方法并設置 watch 為 true,由于是 EPHEMERAL 目錄節點,當創建它的 Server 死去,這個目錄節點也隨之被刪除,所以 Children 將會變化,這時 getChildren上的 Watch 將會被調用,所以其它 Server 就知道已經有某臺 Server 死去了。新增 Server 也是同樣的原理。Zookeeper簡介 集群管理(Group Membership)-實現 Zookeeper 如何實現 Leader Election,也就是選出一個 Master Server。和前面的一樣每臺 Server 創建一個 EPHEMERAL 目錄節點,不同的是它還是一個

13、 SEQUENTIAL 目錄節點,所以它是個 EPHEMERAL_SEQUENTIAL 目錄節點。之所以它是 EPHEMERAL_SEQUENTIAL 目錄節點,是因為我們可以給每臺 Server 編號,我們可以選擇當前是最小編號的 Server 為 Master,假如這個最小編號的 Server 死去,由于是 EPHEMERAL 節點,死去的 Server 對應的節點也被刪除,所以當前的節點列表中又出現一個最小編號的節點,我們就選擇這個節點為當前 Master。這樣就實現了動態選擇 Master,避免了傳統意義上單 Master 容易出現單點故障的問題。Zookeeper簡介 集群管理(Gr

14、oup Membership)-實現Zookeeper簡介 集群管理(Group Membership)-實現Leader Election 關鍵代碼Zookeeper簡介 共享鎖(Locks)共享鎖在同一個進程中很容易實現,但是在跨進程或者在不同 Server 之間就不好實現了。Zookeeper 卻很容易實現這個功能,實現方式也是需要獲得鎖的 Server 創建一個 EPHEMERAL_SEQUENTIAL 目錄節點,然后調用 getChildren方法獲取當前的目錄節點列表中最小的目錄節點是不是就是自己創建的目錄節點,如果正是自己創建的,那么它就獲得了這個鎖,如果不是那么它就調用 exi

15、sts(String path, boolean watch) 方法并監控 Zookeeper 上目錄節點列表的變化,一直到自己創建的節點是列表中最小編號的目錄節點,從而獲得鎖,釋放鎖很簡單,只要刪除前面它自己所創建的目錄節點就行了。Zookeeper簡介 共享鎖(Locks)Zookeeper簡介 共享鎖(Locks)Zookeeper簡介 隊列管理Zookeeper 可以處理兩種類型的隊列: 當一個隊列的成員都聚齊時,這個隊列才可用,否則一直等待所有成員到達,這種是同步隊列。 隊列按照 FIFO 方式進行入隊和出隊操作,例如實現生產者和消費者模型。Zookeeper簡介 隊列管理同步隊列用

16、 Zookeeper 實現的實現思路如下: 創建一個父目錄 /synchronizing,每個成員都監控標志(Set Watch)位目錄 /synchronizing/start 是否存在,然后每個成員都加入這個隊列,加入隊列的方式就是創建 /synchronizing/member_i 的臨時目錄節點,然后每個成員獲取 / synchronizing 目錄的所有目錄節點,也就是 member_i。判斷 i 的值是否已經是成員的個數,如果小于成員個數等待 /synchronizing/start 的出現,如果已經相等就創建 /synchronizing/start。Zookeeper簡介 隊列

17、管理Zookeeper簡介 隊列管理Zookeeper簡介 隊列管理FIFO 隊列用 Zookeeper 實現思路如下: 實現的思路也非常簡單,就是在特定的目錄下創建 SEQUENTIAL 類型的子目錄 /queue_i,這樣就能保證所有成員加入隊列時都是有編號的,出隊列時通過 getChildren( ) 方法可以返回當前所有的隊列中的元素,然后消費其中最小的一個,這樣就能保證 FIFO。Zookeeper簡介 隊列管理生產者代碼:Zookeeper簡介 隊列管理消費者代碼:Zookeeper簡介 指令匯總 創建節點 獲取節點數據 查看子節點列表 設置節點值 刪除所有節點 設置ACL 刪除節

18、點 添加授權信息Zookeeper簡介 創建節點 格式:create -s -e path data acl 其中-s表示創建一個有序節點,-e表示創建一個臨時節點.默認為持久性節點-create -s /test null -create /test null 包括ACL的例子-create -s /test null digest:test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=:rwcda (創建一個path為“/test”的節點,值為“null”,ACL授權方式為“digest”,其中授權的用戶名:密碼為“test:Kk3Nr5X06NH+XdlGMyOrULgK/m

19、o=”,ACL的權限列表為“r”“w”“c”“d”“a”.)Zookeeper簡介 創建節點digest授權方式表示client方位此節點數據,需要指定用戶名和密碼,可以參考zookeeper中 DigestAuthenticationProvider.generateDigest(String ipName)方法;通過向此方法指定原始的用戶名和密碼即可獲得digest之后的字符串,比如傳入test:test,將會得 到test:V28q/NynI4JI3Rk54h0r8O5kMug=,其內部原理是將密碼部分進行MD5 + sha1操作.再zkCli.sh指令上你需要傳遞digest之后的字符串. 其中ACL的授權方式有很多種,你可以在ZooDefs類中找到更多的信息. 最后一個參數為權限列表,r表示read,w表示write,c表示create,d表示delete,a表示adminZookeeper簡

溫馨提示

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

評論

0/150

提交評論