zookeeper基礎問題

zookeeper是什麼

zookeeper是一個分佈式協調服務的開源框架,主要是用來解決分佈式集羣中應用系統的一致性問題,例如怎樣避免網時操作同一數據造成的髒讀的問題,zookeeper本質上是一個分佈式的小文件存儲系統,提供基於類似於文件系統的目錄樹方式的數據存儲,並且可以對樹中的系欸但進行有效管理,從而用來維護和監控你存儲的數據的狀態變化,通過監控這些數據狀態的變化,從而可以達到基於數據的集羣管理。
在這裏插入圖片描述

zookeeper特性

在這裏插入圖片描述
集羣角色:
Leader:
Zookeeper 集羣工作的核心
事務請求(寫操作)的唯一調度和處理者,保證集羣事務處理的順序性
集羣內部各個服務器的調度者。
對於 create, setData, delete 等有寫操作的請求,則需要統一轉發給leader 處理.leader 需要決定編號、執行操作,這個過程稱爲一個事務。
Follower:
處理客戶端非事務(讀操作)請求,轉發事務請求給 Leader
參與集羣Leader 選舉投票。
Observer:(對於訪問量比較大的集羣,可以新增觀察者角色)
觀察者角色,觀察Zookeeper集羣的最新狀態變化並將這些狀態同步過來,對於非事務請求可以進行獨立處理,對於事務請求,則會轉發給 Leader服務器進行處理。
不會參與任何形式的投票只提供非事務服務,通常用於在不影響集羣事務處理能力的前提下提升集羣的非事務處理能力。
在這裏插入圖片描述
每個 Znode 由3部分組成:
stat:此爲狀態信息,描述該 Znode 的版本,權限等信息
data: 與該Znode 關聯的數據
children: 該 Znode下的子節點

zookeeper分佈式環境

Zookeeper 集羣搭建指的是 ZooK eeper 分佈式模式安裝,通常由2n+l臺 servers 組成。這是因爲爲了保證 Leader 選舉(基於Paxos 算法的實現)能過得到多數的支持,所以 Zookeeper集羣的數量一般爲奇數
1.集羣規劃
2.解壓安裝
3.配置服務器編號
在zookeeper-3.4.10/這個目錄下創建zkData,在zookeeper-3.4.10/zkData目錄下創建一個myid的文件(添加myid文件,注意一定要在linux裏面創建,在notepad++裏面很可能亂碼),在文件中添加與server對應的編號:拷貝配置好的zookeeper到其他機器上,配置zoo.cfg文件,
重命名zookeeper-3.4.10/conf這個目錄下的zoo_sample.cfg爲zoo.cfg,
修改數據存儲路徑配置
dataDir=/opt/module/zookeeper-3.4.10/zkData
增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
同步zoo.cfg配置文件

配置參數解讀
server.A=B:C:D。
A是一個數字,表示這個是第幾號服務器;
集羣模式下配置一個文件myid,這個文件在dataDir目錄下,這個文件裏面有一個數據就是A的值,Zookeeper啓動時讀取此文件,拿到裏面的數據與zoo.cfg裏面的配置信息比較從而判斷到底是哪個server。
B是這個服務器的地址;
C是這個服務器Follower與集羣中的Leader服務器交換信息的端口;
D是萬一集羣中的Leader服務器掛了,需要一個端口來重新進行選舉,選出一個新的Leader,而這個端口就是用來執行選舉時服務器相互通信的端口

集羣的啓動

分別啓動Zookeeper:
bin/zkServer.sh start
查看狀態:
bin/zkServer.sh status
關閉:
bin/zkServer.sh stop

zookeeper節點類型

在這裏插入圖片描述

zookeeper的shell命令

命令基本語法
help 顯示所有操作命令
ls path [watch] 使用 ls 命令來查看當前znode中所包含的內容
ls2 path [watch] 查看當前節點數據並能看到更新次數等數據
create 普通創建
-s 含有序列
-e 臨時(重啓或者超時消失)
get path [watch] 獲得節點的值
set 設置節點的具體值
stat 查看節點狀態
delete 刪除節點
rmr 遞歸刪除節點
啓動客戶端:bin/zkCli.sh

zookeeper選舉機制

1)半數機制:集羣中半數以上機器存活,集羣可用。所以Zookeeper適合安裝奇數臺服務器。
2)Zookeeper雖然在配置文件中並沒有指定Master和Slave。但是,Zookeeper工作時,是有一個節點爲Leader,其他則爲Follower,Leader是通過內部的選舉機制臨時產生的。
3)以一個簡單的例子來說明整個選舉的過程。
假設有五臺服務器組成的Zookeeper集羣,它們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的。假設這些服務器依序啓動,來看看會發生什麼,如圖所示:
在這裏插入圖片描述
(1)服務器1啓動,發起一次選舉。服務器1投自己一票。此時服務器1票數一票,不夠半數以上(3票),選舉無法完成,服務器1狀態保持爲LOOKING;
(2)服務器2啓動,再發起一次選舉。服務器1和2分別投自己一票並交換選票信息:此時服務器1發現服務器2的ID比自己目前投票推舉的(服務器1)大,更改選票爲推舉服務器2。此時服務器1票數0票,服務器2票數2票,沒有半數以上結果,選舉無法完成,服務器1,2狀態保持LOOKING
(3)服務器3啓動,發起一次選舉。此時服務器1和2都會更改選票爲服務器3。此次投票結果:服務器1爲0票,服務器2爲0票,服務器3爲3票。此時服務器3的票數已經超過半數,服務器3當選Leader。服務器1,2更改狀態爲FOLLOWING,服務器3更改狀態爲LEADING;
(4)服務器4啓動,發起一次選舉。此時服務器1,2,3已經不是LOOKING狀態,不會更改選票信息。交換選票信息結果:服務器3爲3票,服務器4爲1票。此時服務器4服從多數,更改選票信息爲服務器3,並更改狀態爲FOLLOWING;
(5)服務器5啓動,同4一樣當小弟。

zookeeper寫流程

在這裏插入圖片描述

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