作用
分布式系統中的主節點擊舉! 比如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所提供的服務涵蓋 ...