ZooKeeper入門(一)基本用法

一 基本介紹

Zookeeper 是一個分布式協(xié)調(diào)服務(wù)的開源框架。主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題,例如怎樣避免同時操作同一數(shù)據(jù)造成臟讀的問題。
ZooKeeper 本質(zhì)上是一個分布式小文件存儲系統(tǒng)。提供基于類似于文件系統(tǒng)的目錄樹方式的數(shù)據(jù)存儲,并且可以對樹中的節(jié)點進(jìn)行有效管理。從而用來維護(hù)和監(jiān)控你存儲的數(shù)據(jù)的狀態(tài)變化。通過監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,從而可以達(dá)到基于數(shù)據(jù)的集群管理。諸如:統(tǒng)一命名服務(wù)、分布式配置管理、分布式消息隊列、分布式鎖、分布式協(xié)調(diào)等功能。

image.png

1.1 特性

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

補充
zookeeper是順序一致性(即兩個寫操作在同一個節(jié)點必然是有序的,個人感覺就比最終一致性強一點),zookeeper不能保證每個client訪問到的集群中的數(shù)據(jù)是一致的

線性一致性:一致性更強。只有一個客戶端看到了一個新值,則所有的客戶端都不可能看到舊值。
參考:https://www.iteye.com/blog/flyfoxs-2121560

二 集群中的角色

image.png

2.1 leader

Zookeeper 集群工作的核心
事務(wù)請求(寫操作)唯一調(diào)度和處理者,保證集群事務(wù)處理的順序性;集群內(nèi)部各個服務(wù)器的調(diào)度者。
對于 create,setData,delete 等有寫操作的請求,則需要統(tǒng)一轉(zhuǎn)發(fā)給leader 處理,leader 需要決定編號、執(zhí)行操作,這個過程稱為一個事務(wù)。

2.2 follower

  • 處理客戶端非事務(wù)(讀操作)請求,轉(zhuǎn)發(fā)事務(wù)請求給 Leader;
  • 參與集群 Leader 選舉投票。
    此外,針對訪問量比較大的 zookeeper 集群,還可新增觀察者角色

2.3 observer

  • 觀察者角色,觀察 Zookeeper 集群的最新狀態(tài)變化并將這些狀態(tài)同步過來,其對于非事務(wù)請求可以進(jìn)行獨立處理,對于事務(wù)請求,則會轉(zhuǎn)發(fā)給 Leader服務(wù)器進(jìn)行處理。
  • 不會參與任何形式的投票只提供非事務(wù)服務(wù),通常用于在不影響集群事務(wù)處理能力的前提下提升集群的非事務(wù)處理能力

三 集群搭建

image.png

3.1 卸載openjdk

image.png

3.2 安裝sun-jdk

  • 將下載的壓縮包傳到服務(wù)器上
  • 解壓tar -zxvf jdk-8u211-linux-x64.tar.gz
  • 開始配置vim /etc/profile
    在最后一行后面加上
export JAVA_HOME=/usr/local/soft/jdk1.8.0_211
export JRE_HOME=$JAVA_HOME/jre  
export PATH=$PATH:$JAVA_HOME/bin  
export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  • 使更新生效,執(zhí)行source /etc/profile

3.3 集群安裝

四 數(shù)據(jù)模型

ZooKeeper 的數(shù)據(jù)模型,在結(jié)構(gòu)上和標(biāo)準(zhǔn)文件系統(tǒng)的非常相似,擁有一個層次的命名空間,都是采用樹形層次結(jié)構(gòu),ZooKeeper 樹中的每個節(jié)點被稱為—Znode。和文件系統(tǒng)的目錄樹一樣,ZooKeeper 樹中的每個節(jié)點可以擁有子節(jié)點。
但也有不同之處:

  • Znode 兼具文件和目錄兩種特點。既像文件一樣維護(hù)著數(shù)據(jù)、元信息、ACL、時間戳等數(shù)據(jù)結(jié)構(gòu),又像目錄一樣可以作為路徑標(biāo)識的一部分,并可以具有子 Znode。用戶對 Znode 具有增、刪、改、查等操作(權(quán)限允許的情況下)
  • Znode 具有原子性操作,讀操作將獲取與節(jié)點相關(guān)的所有數(shù)據(jù),寫操作也將替換掉節(jié)點的所有數(shù)據(jù)。另外,每一個節(jié)點都擁有自己的ACL(訪問控制列表),這個列表規(guī)定了用戶的權(quán)限,即限定了特定用戶對目標(biāo)節(jié)點可以執(zhí)行的操作。
  • Znode 存儲數(shù)據(jù)大小有限制(通常以 KB 為大小單位)
  • Znode 通過路徑引用,如同 Unix 中的文件路徑。路徑必須是絕對的,因此他們必須由斜杠字符來開頭。不能重復(fù),并且一些特殊路徑已經(jīng)被系統(tǒng)占用掉了

4.1 數(shù)據(jù)結(jié)構(gòu)體

image.png

4.2 節(jié)點類型

image.png

這樣,一共就有4種類型的節(jié)點

  • PERSISTENT:永久節(jié)點
  • EPHEMERAL:臨時節(jié)點
  • PERSISTENT_SEQUENTIAL:永久節(jié)點、序列化
  • EPHEMERAL_SEQUENTIAL:臨時節(jié)點、序列化

4.3 節(jié)點屬性

image.png

image.png

image.png

五 shell客戶端

5.1 連接操作

./zkCli.sh  -r -server ip:port

-timeout:當(dāng)前會話的超時時間,zookeper依靠與客戶端的心跳來判斷會話是否有效,單位是毫秒
-r: 只讀模式,zookeeper的只讀模式指一個服務(wù)器與集群中過半機器失去連接以后,這個服務(wù)器就不在不處理客戶端的請求,但我們?nèi)匀幌M摲?wù)器可以提供讀服務(wù)。
-server: zookeeper服務(wù)器ip地址和端口號

5.2 創(chuàng)建節(jié)點

image.png
  • 臨時節(jié)點的刪除有一定延時(因為集群需要判斷會話是真的斷了,還是網(wǎng)絡(luò)斷了一下)

5.3 節(jié)點查看

image.png

5.4 更新節(jié)點

image.png

5.5 刪除節(jié)點

delete和Rmr

image.png

5.6 quota(定額)

image.png

5.7 其他命令

image.png

六 watch

image.png

6.1 機制特點

image.png

6.2 通知狀態(tài)和事件類型

image.png

6.3 shell操作watch

image.png
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容