ZooKeepe入門來這

1 ZooKeeper 基本知識

1.1 ZooKeeper集羣搭建

Zookeeper集羣搭建指的是ZooKeeper分佈式模式安裝。通常由2n+1臺servers組成。這是因爲爲了保證Leader選舉(基於Paxos算法的實現)能過得到多數的支持,所以ZooKeeper集羣的數量一般爲奇數。
Zookeeper運行需要java環境,所以需要提前安裝jdk。對於安裝leader+follower模式的集羣,大致過程如下:
配置主機名稱到IP地址映射配置
修改ZooKeeper配置文件
遠程複製分發安裝文件
設置myid
啓動ZooKeeper集羣

1.2 ZooKeeper概述

Zookeeper是一個分佈式協調服務的開源框架。主要用來解決分佈式集羣中應用系統的一致性問題。

ZooKeeper本質上是一個分佈式的小文件存儲系統提供基於類似於文件系統的目錄樹方式的數據存儲,並且可以對樹中的節點進行有效管理。從而用來維護和監控你存儲的數據的狀態變化。通過監控這些數據狀態的變化,從而可以達到基於數據的集羣管理。

簡單的來說 就是文件系統+監聽模式

1.3 ZooKeeper特性

1.全局數據一致:集羣中每個服務器保存一份相同的數據副本,client無論連接到哪個服務器,展示的數據都是一致的,這是最
重要的特徵;
2.可靠性:如果消息被其中一臺服務器接受,那麼將被所有的服務器接受。
3.順序性:包括全局有序和偏序兩種:全局有序是指如果在一臺服務器上消息a在消息b前發佈,則在所有Server上消息a都將在
消息b前被髮布;偏序是指如果一個消息b在消息a後被同一個發送者發佈,a必將排在b前面。
4.數據更新原子性:一次數據更新要麼成功(半數以上節點成功),要麼失敗,不存在中間狀態;
5.實時性:Zookeeper保證客戶端將在一個時間間隔範圍內獲得服務器的更新信息,或者服務器失效的信息。

1.4、ZooKeeper集羣角色

一般分爲3個角色
Leader
Zookeeper集羣工作的核心
事務請求(寫操作)的唯一調度和處理者,保證集羣事務處理的順序性;
集羣內部各個服務器的調度者。
Follower
處理客戶端非事務(讀操作)請求,轉發事務請求給Leader;
參與集羣Leader選舉投票。
Observer
觀察者角色,觀察Zookeeper集羣的最新狀態變化並將這些狀態同步過來,其對於非事務請求可以進行獨立處理,對於事務請求,則會轉發給Leader服務器進行處理。
不會參與任何形式的投票只提供非事務服務,通常用於在不影響集羣事務處理能力的前提下提升集羣的非事務處理能力。

2、ZooKeeper shell

2.1 基本命令

1 進入客戶端模式 命令
zkCl.sh -server ip
2創建節點
create -s path 創建順序節點
create -e path 創建臨時節點
create path 創建永久節點
3讀取節點
 ls path [watch]
 get path [watch]
 ls2 path [watch]
 與讀取相關的命令有ls 命令和get 命令,ls命令可以列出Zookeeper指定節點下的所有子節點,只能查看指定節點下的第一級的所有子節點;get命令可以獲取Zookeeper指定節點的數據內容和屬性信息。
 4更新節點
 set path data [version]
data就是要更新的新內容,version表示數據版本。
5刪除節點
delete path [version]
若刪除節點存在子節點,那麼無法刪除該節點,必須先刪除子節點,再刪除父節點。
Rmr path
可以遞歸刪除節點
6對節點設置
setquota -n|-b val path 對節點增加限制。
n:表示子節點的最大個數
b:表示數據值的最大長度
val:子節點最大個數或數據值的最大長度
path:節點路徑
listquota path 列出指定節點的quota
delquota [-n|-b] path 刪除quota 刪除節點設置
7其他命令
history : 列出命令歷史
redo:該命令可以重新執行指定命令編號的歷史命令,命令編號可以通過history查看

3、ZooKeeper數據模型

ZooKeeper的數據模型,在結構上和標準文件系統的非常相似,擁有一個層次的命名空間,都是採用樹形層次結構,ZooKeeper樹中的每個節點被稱爲—Znode。和文件系統的目錄樹一樣,ZooKeeper樹中的每個節點可以擁有子節點。但也有不同之處:
1.Znode兼具文件和目錄兩種特點。既像文件一樣維護着數據、元信息、ACL、時間戳等數據結構,又像目錄一樣可以作爲路徑標識的一部分,並可以具有子Znode。用戶對Znode具有增、刪、改、查等操作(權限允許的情況下)。
2.Znode具有原子性操作,讀操作將獲取與節點相關的所有數據,寫操作也將替換掉節點的所有數據。另外,每一個節點都擁有自己的ACL(訪問控制列表),這個列表規定了用戶的權限,即限定了特定用戶對目標節點可以執行的操作。
3.Znode存儲數據大小有限制。ZooKeeper雖然可以關聯一些數據,但並沒有被設計爲常規的數據庫或者大數據存儲,相反的是,它用來管理調度數據,比如分佈式應用中的配置文件信息、狀態信息、彙集位置等等。這些數據的共同特性就是它們都是很小的數據,通常以KB爲大小單位。ZooKeeper的服務器和客戶端都被設計爲嚴格檢查並限制每個Znode的數據大小至多1M,當時常規使用中應該遠小於此值。
4.Znode通過路徑引用,如同Unix中的文件路徑。路徑必須是絕對的,因此他們必須由斜槓字符來開頭。除此以外,他們必須是唯一的,也就是說每一個路徑只有一個表示,因此這些路徑不能改變。在ZooKeeper中,路徑由Unicode字符串組成,並且有一些限制。字符串"/zookeeper"用以保存管理信息,比如關鍵配額信息。

3.1、數據結構圖

在這裏插入圖片描述
圖中的每個節點稱爲一個Znode。 每個Znode由3部分組成:
① stat:此爲狀態信息, 描述該Znode的版本, 權限等信息
② data:與該Znode關聯的數據
③ children:該Znode下的子節點

3.2、節點類型

Znode有兩種,分別爲臨時節點和永久節點。
節點的類型在創建時即被確定,並且不能改變。
臨時節點:該節點的生命週期依賴於創建它們的會話。一旦會話結束,臨時節點將被自動刪除,當然可以也可以手動刪除。臨時節點不允許擁有子節點。
永久節點:該節點的生命週期不依賴於會話,並且只有在客戶端顯示執行刪除操作的時候,他們才能被刪除。
Znode還有一個序列化的特性,如果創建的時候指定的話,該Znode的名字後面會自動追加一個不斷增加的序列號。序列號對於此節點的父節點來說是唯一的,這樣便會記錄每個子節點創建的先後順序。它的格式爲“%10d”(10位數字,沒有數值的數位用0補充,例如“0000000001”)。
這樣便會存在四種類型的Znode節點,分別對應:
PERSISTENT:永久節點
EPHEMERAL:臨時節點
PERSISTENT_SEQUENTIAL:永久節點、序列化
EPHEMERAL_SEQUENTIAL:臨時節點、序列化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章