Zookeeper原理及應用匯總

1 Zookeeper簡介-分佈式服務框架

   ZooKeeper爲分佈式應用程序提供高效且可靠的分佈式協調服務,提供的服務:配置管理、統一命名服務、分佈式同步、組服務等,是Google Chubby的開源實現,Hadoop和Hbase的重要組件;是一個典型的分佈式數據一致性的解決方案,分佈式應用程序可基於它實現諸如數據發佈/訂閱、負載均衡、分佈式協調/通知、集羣管理、Master選舉、分佈式鎖和分佈式隊列等功能。

   ZooKeeper的設計目標就是將複雜易出錯的分佈式一致性服務封裝起來,構成高效可靠的原語集,並以一系列簡單易用的接口提供給用戶使用,支持Java和C的接口。

   ZooKeeper代碼版本中,提供了分佈式獨享鎖、選舉、隊列的接口。其中分佈鎖和隊列有Java和C兩個版本,選舉只有Java版本。

   ZooKeeper是以FastPaxos算法爲基礎的,Paxos 算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),只有lead才能提交proposer[申請]。在解決分佈式數據一致性方面,ZooKeeper並沒有直接採用Paxos算法,而是使用ZAB的一致性協議。

   ZooKeeper的基本運轉流程:

   1、選舉Leader。               2、同步數據。

   3、選舉Leader過程中算法有很多,但要達到的選舉標準是一致的。

   4、Leader要具有最高的zxid。

   5、集羣中大多數的機器得到響應並follow選出的Leader

2 常用命令

四字命令

功能描述

conf

輸出相關服務配置的詳細信息。

cons

列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息。包括“接受 / 發送”的包數量、會話 id 、操作延遲、最後的操作執行等等信息。

dump

列出未經處理的會話和臨時節點。

envi

輸出關於服務環境的詳細信息(區別於 conf 命令)。

reqs

列出未經處理的請求

ruok

測試服務是否處於正確狀態。如果確實如此,那麼服務返回“imok ”,否則不做任何相應。

stat

輸出關於性能和連接的客戶端的列表。

wchs

列出服務器 watch 的詳細信息。

wchc

通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與watch 相關的會話的列表。

wchp

通過路徑列出服務器 watch 的詳細信息。它輸出一個與 session相關的路徑。

 

3 命令行工具

[sgwdev_linuxuser@tydicbin]$ ./zkCli.

zkCli.cmd  zkCli.sh  

[sgwdev_linuxuser@tydicbin]$ ./zkCli.sh -server 192.168.1.165:2181

Connecting to192.168.1.165:2181

4 簡單操作

1)ls 查看ZooKeeper指定節點下一級所有子節點

ls path [watch]

2)get 獲取ZooKeeper指定節點的數據內容和屬性信息

get path [watch]

3)set 更新指定節點的數據內容,version爲指定ZNode數據結點的版本,不指定更新後

dataVersin會+1

set path data[version]

4)create 創建一個ZooKeeper節點,-s:順序節點;-e:臨時節點;默認爲永久節點;

acl: 權限控制,默認不做控制

create [-s] [-e]path data acl

5)delete 在沒有沒有子結點時刪除ZooKeeper指定節點

delete path[version]

5 開源客戶端

Curator(全世界應用最廣泛)   ,   ZkClient

6 目標

1)簡單的數據模型

ZooKeeper服務器內存中的數據模型,由系列的ZNode節點構成,樹型結構命名空間-7.1.1

2)構建集羣 7.3

3)順序訪問 7.8

對於客戶端每個請求會分配一個全局唯一的遞增編號,編號反映所有事務操作的先後順序。

4)高性能

全量數據存儲在內存中,直接服務於客戶端所有非事務請求,尤其適合於以讀操作爲主場景

7 概念

1)集羣角色

   通常分佈式集羣是主備模式(Master/Slave);ZooKeeper採用Leader、Follower、Observer三角色,通過Leader選舉選定Leader服務器,爲客戶端提供讀和寫服務,Follower和Observer節點提供讀服務,Observer節點不參與Leader選舉和寫操作“過半寫成功”策略,故可以在不影響寫性能的情況下提升集羣的讀性能 7.7

2)會話

3)數據節點ZNode

   所有ZNode以模型結構存儲在內存中,數據節點ZNode包含數據內容和系列的屬性信息,

如。分持久PERSISTENT,臨時節點EPHEMERAL和順序節點SEQUENTIAL,可組成4種組合型節點。持久節點:創建後只有主動進行刪除操作才移除,否則一直有效;臨時節點:生命週期與Client會話綁定,在Client會話失效時,這個客戶端所創建的所有臨時結點都會刪除,SEQUENTIAL,創建節點後追加整形數字,由父節點維護的自增數字,

4)版本

    ZNode內Stat數據結構,記錄ZNode三個數據版本,version當前版本;cversion當前子節點版本;aversion當前ACL版本 7.1.3

5)Watcher 事件監聽器

   用戶在指定節點註冊一些Watcher,並且在特定事件觸發的時候,ZooKeeper服務端會將事件通知到感興趣的客戶端上去,該機制是ZooKeeper實現分佈式協調服務的重要特性。7.1.4

6)ACL 訪問控制列表(AccessControl List) ,通過ACL策略進行權限控制,5種權限

   CREATE:創建子節點權限        READ:獲取節點數據和子節點列表的權限

   WRITE:更新節點數據的權限     DELETE:刪除子節點數據的權限

   ADMIN:設置節點ACL的權限   7-1-5

7)ZAB協議ZooKeeperAtomic Broadcast 原子消息廣播協議,保證數據一致性的核心算法

8 Zookeeper結構


角色:Zookeeper=服務端+客戶端

服務端

支持羣集,包括文件系統和通知機制

客戶端

連接服務端,操作數據,註冊要監聽的數據,接收通知

 

功能:Zookeeper=文件系統+通知機制

文件系統

存儲和管理數據,以樹型的結構存儲

通知機制

監控文件系統的數據變化,通知監聽的客戶端

8.1文件系統


Zookeeper數據結構特點:

路徑唯一標識

樹型存儲結構,與文件系統目錄樹結構類似

例:/Apps/App3/SubApp1

節點下可以創建子節點

可以針對節點進行增,刪,改,查,創建子節點操作

各個節點下可以存儲數據,數據可以有多個版本。

臨時節點

一旦創建這個節點的客戶端與服務器失去聯繫,這個節點也將自動刪除,

Zookeeper 的客戶端和服務器通信採用長連接方式,

每個客戶端和服務器通過心跳來保持連接,

這個連接狀態稱爲 session,如果節點是臨時節點,

這個 session 失效,節點也就刪除了.

臨時節點下不能創建子節點

永久節點

創建這個節點的客戶端與服務器失去聯繫,這個節點不會刪除。

節點的名稱可以自動編號

如 App1 已經存在,再創建的話,將會自動命名爲 App2     

節點可以被監控

節點中存儲數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,這個是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基於這個特性實現的.

8.2通知機制


Zookeeper 的客戶端和服務器通信採用長連接方式,客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,每個客戶端和服務器通過心跳來保持連接,zookeeper會通知客戶端。

8.3總結



Zookeeper原理:

1

存儲

負責存儲和管理數據

2

註冊

然後接受客戶端的註冊,監聽相關的數據

3

變化

一旦這些數據的狀態發生變化

4

通知

Zookeeper 負責通知已經在 Zookeeper 上註冊的那些客戶端

5

業務處理

客戶端做出相應的反應

Zookeeper 特點:

順序一致性

按照客戶端發送請求的順序更新數據。

原子性

更新要麼成功,要麼失敗,不會出現部分更新。

單一性

無論客戶端連接哪個server,都會看到同一個視圖。

可靠性

一旦數據更新成功,將一直保持,直到新的更新。

及時性

客戶端會在一個確定的時間內得到最新的數據。

Zookeeper功能:

1

名稱服務

統一命名服務,唯一的名稱,樹形的名稱結構,便於人識別和記住,不會重複

2

配置維護

分佈式應用配置項的管理

3

分佈式同步

狀態同步服務

4

組服務

集羣管理

注:Zoopkeeper 提供了一套很好的分佈式集羣管理的機制,從而可以設計出多種多樣的分佈式的數據管理模型,而不僅僅侷限於下面提到的幾個常用應用場景。

8.4容錯節點

zookeeper集羣的容錯能力情況:若2n+1=集羣PC總數,n即爲可容納的故障節點。
例如:3臺能容錯1臺,5臺能容錯2臺,7臺能容錯3臺。


附:

     關於Zookeeper 可參考相應資料,涉及內容:

            1)Zookeeper概述、原理及應用匯總              2)Zookeeper分佈式服務框架內容總結:包括四字命令、命令行工具操作、目標、概念、 Zookeeper結構等說明 

            3)4大應用場景(配置中心、集羣管理、等)  4)Linux Evi集羣(三臺PC)部署

            下載地址:Zookeeper概述、原理及應用匯總


            ZK 常見4大應用場景&JAVA 實現DEMO Code 以及 Zookeeper源代碼3.4.9版本 可參考相應資料,下載地址:Zookeeper公司內部交流學習、培訓總結

    內容截圖如下:





   有不妥或不正確的地方請指出,大家一同學習、進步!

發佈了89 篇原創文章 · 獲贊 54 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章