zookeeper的核心概念和安裝

2021-10-08 06:28:46 字數 3993 閱讀 1437

作用

分布式系統中的主節點擊舉!  比如hbase中的老大的產生 hmaster(ha)

分布式系統中的主從節點感知!

分布式系統中的配置檔案同步!

系統伺服器的動態上下線感知!!!

分布式系統中的分布式鎖的實現!分布式中的同乙個物件

分布式系統中的名稱服務!

分布式系統中的負載均衡! ...

zookeeper的功能其實很簡單:就是提供協調服務!

協調服務具體來說有三方面:

幫使用者儲存一些狀態資訊

幫使用者讀取一些資訊

幫使用者監視一些資訊的變化,並將變化作為事件通知給使用者

角色» 領導者(leader),負責進行投票的發起和決議,更新系統狀態

» 學習者(learner),包括跟隨者(follower)和觀察者(observer),follower用於接受客戶端請求並想客戶端返回結果,在選主過程中參與投票

» observer可以接受客戶端連線,將寫請求**給leader,但observer不參加投票過程,只同步leader的狀態,observer的目的是為了擴充套件系統,提高讀取速度

» 客戶端(client),請求發起方

zookeeper的核心是原子廣播,這個機制保證了各個server之間的同步。實現這個機制的協議叫做zab協

議。zab協議有兩種模式,它們分別是恢復模式(選主)和廣播模式(同步)。當服務啟動或者在領導者

崩潰後,zab就進入了恢復模式,當領導者被選舉出來,且大多數server完成了和leader的狀態同步以後

,恢復模式就結束了。狀態同步保證了leader和server具有相同的系統狀態。

• 為了保證事務的順序一致性,zookeeper採用了遞增的事務id號(zxid)來標識事務。所有的提議(

proposal)都在被提出的時候加上了zxid。實現中zxid是乙個64位的數字,它高32位是epoch用來標識

leader關係是否改變,每次乙個leader被選出來,它都會有乙個新的epoch,標識當前屬於那個leader的

統治時期。低32位用於遞增計數。

• 每個server在工作過程中有三種狀態:

looking:當前server不知道leader是誰,正在搜尋

leading:當前server即為選舉出來的leader

following:leader已經選舉出來,當前server與之同步

其他文件:

資料儲存

zookeeper維護乙個類似檔案系統的資料結構:

每個子目錄項如 nameservice 都被稱作為 znode(目錄節點),和檔案系統一樣,我們能夠自由的增加、刪除znode,在乙個znode下增加、刪除子znode,唯一的不同在於znode是可以儲存資料的。

有四種型別的znode:

persistent-持久化目錄節點

客戶端與zookeeper斷開連線後,該節點依舊存在

persistent_sequential-持久化順序編號目錄節點

客戶端與zookeeper斷開連線後,該節點依舊存在,只是zookeeper給該節點名稱進行順序編號

ephemeral-臨時目錄節點

客戶端與zookeeper斷開連線後,該節點被刪除

ephemeral_sequential-臨時順序編號目錄節點

客戶端與zookeeper斷開連線後,該節點被刪除,只是zookeeper給該節點名稱進行順序編號

資料讀寫

» zookeeper是乙個由多個server組成的集群

» 乙個leader,多個follower

» 每個server儲存乙份資料副本

» 全域性資料一致

» 分布式讀寫

» 更新請求**,由leader實施

zookeeper 的保證 

» 更新請求順序進行,來自同乙個client的更新請求按其傳送順序依次執行

» 資料更新原子性,一次資料更新要麼成功,要麼失敗

» 全域性唯一資料檢視,client無論連線到哪個server,資料檢視都是一致的

» 實時性,在一定事件範圍內,client能讀到最新資料

zookeeper節點資料操作流程

注:1.在client向follwer發出乙個寫的請求

2.follwer把請求傳送給leader

3.leader接收到以後開始發起投票並通知follwer進行投票

4.follwer把投票結果傳送給leader

5.leader將結果彙總後如果需要寫入,則開始寫入同時把寫入操作通知給leader,然後commit;

6.follwer把請求結果返回給client

follower主要有四個功能:

• 1. 向leader傳送請求(ping訊息、request訊息、ack訊息、revalidate訊息);

• 2 .接收leader訊息並進行處理;

• 3 .接收client的請求,如果為寫請求,傳送給leader進行投票;

• 4 .返回client結果。

follower的訊息迴圈處理如下幾種來自leader的訊息:

• 1 .ping訊息: 心跳訊息;

• 2 .proposal訊息:leader發起的提案,要求follower投票;

• 3 .commit訊息:伺服器端最新一次提案的資訊;

• 4 .uptodate訊息:表明同步完成;

• 5 .revalidate訊息:根據leader的revalidate結果,關閉待revalidate的session還是允許其接受訊息;

• 6 .sync訊息:返回sync結果到客戶端,這個訊息最初由客戶端發起,用來強制得到最新的更新。

選舉機制

leader選舉過程(以3個節點的集群為例):

注:每個節點的配置檔案中都有乙個自己的獨一無二的id

zookeeper的程序在不同的工作模式下,有不同的通訊埠(比如選舉時,通過埠3888通訊;作為leader或者follower接收客戶端請求時通過埠2181;leader和follower之間通訊用2888)

注意在zk集群安裝的時候 會人為的為每台機器分配乙個唯一的id

集群初次啟動時的選舉流程

第一台機器(id=1)啟動,發現沒有leader,進入投票模式,投自己,並收到自己投這一票,得1票,不能當選leader(當leader的條件是,集群機器數量過半的票數)

第2臺機器(id=2)啟動,發現沒有leader,進入投票模式,投自己(因為自己的id>1 收到的另一台機器的票的id)

第1臺機器收到2的票,發現集群中有乙個比自己id大的機器上線了,重新投票,投id=2

第2臺收到的得票數為2票,過半數,自己當選,切換模式:leader模式

第1臺就發現有leader存在了,自己切換模式:follower

第3臺啟動,發現有leader,自動進入follower狀態

如果每個節點是同時啟動的zk  同時選舉自己 ,同時廣播  , 同時獲取別人的廣播,3機器會當選

集群在執行過程中的選舉流程

修改配置檔案

# set to "0" to disable auto purge feature

#autopurge.purgeinterval=1

server.1=linux01:2888:3888

server.2=linux02:2888:3888

server.3=linux03:2888:3888

在各個節點上,手動建立資料儲存目錄

在各個節點的資料儲存目錄中,生成乙個myid檔案,內容為它的id

分發安裝包

啟動集群

zookeeper沒有自帶乙個批啟指令碼,只能手動在每一台節點上乙個乙個地啟動

每台機器都執行

bin/zkserver.sh start   zk服務啟動

bin/zkserver.sh statuszk 檢視服務狀態

bin/zkserver.sh stop   zk停止服務

Zookeeper核心概念

zookeeper 是乙個典型的分布式資料一致性解決方案,分布式應用程式可以基於 zookeeper 實現諸如資料發布 訂閱 負載均衡 命名服務 分布式協調 通知 集群管理 master 選舉 分布式鎖和分布式佇列等功能。zookeeper 乙個最常用的使用場景就是用於擔任服務生產者和服務消費者的註...

ZooKeeper的概念原理

zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,它包含乙個簡單的原語集,分布式式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper是hadoop的乙個子專案。在分布式應用中,由於工程師不能很好的使用鎖機制,以及基於訊息的協調機制不適合在某些應用中使用,因此...

Zookeeper概念簡介

zookeeper是乙個分布式協調服務 就是為使用者的分布式應用程式提供協調服務 a zookeeper是為別的分布式程式服務的 b zookeeper 本身就是乙個分布式程式 只要有半數以上節點存活,zk就能正常服務,zookeeper適合裝在奇數臺機器上!c zookeeper所提供的服務涵蓋 ...