ZOOKEEPER
一、概述
是一個開源的分佈式的,爲分佈式應用提供協調服務的Apache項目
基於觀察者模式設計的分佈式服務管理框架,它負責存儲和管理大家都關心的數據,然後接受觀察者的註冊,一旦這些數據發送變化,zookeeper就將負責通知註冊的觀察者做出相應的反應,從而實現集羣中類似Master/Slave管理模式
Zookeeper = 文件系統 + 通知機制
二、應用場景
提供的服務包括:
1、分佈式消息和協調機制
2、服務器節點動態上下線
3、統一配置管理
4、負載均衡
5、集羣管理
場景:
1、數據發佈與訂閱
2、軟負載均衡
3、集羣管理
三、本地模式安裝部署
配置:
將zoo_sample.cfg改成zoo.cfg
修改dataDir路徑爲zookeeper-3.4.10/data/zkData
創建zkData文件夾
參數解讀:
tickTime
通信心跳數(默認2000,即2秒)
initLimit
LF初始通信時限(默認10心跳數)
syncLimit
LF同步通信時限(默認5心跳數)
dataDir
數據文件目錄+數據持久化路徑
ClientPort
客戶端連接端口2181
分佈式安裝部署在本地基礎上:
zoo.cfg加配置
server.1=hadoop001:2888:3888
dataDir下配置一個文件myid
四、數據結構
數據模型的結構與Unix文件系統很類似,整體上可以看做是一棵樹,每個節點稱作一個ZNode
很顯然zookeeper集羣自身維護了一套數據結構。這個存儲結構是一個樹形結構,其上的每一個節點,我們稱之爲“znode”,每一個znode默認能夠存儲1MB的數據,每個ZNode都可以通過其路徑唯一標識
五、選舉機制
1、半數機制
集羣中半數以上機器存活,集羣可用。所以zookeeper適合裝在奇數臺機器上
2、雖然在配置文件中沒有指定master和slave,但是在工作時,是有一個節點爲leader,其他的則爲follower,leader是通過內部的選舉機制臨時產生的
六、特點
1、zookeeper:一個領導者(leader),多個跟隨者(follower)組成的集羣
2、leader負責進行投票的發起和決議,更新系統狀態
3、follower用於接收客戶請求並向客戶端返回結果,在選舉leader過程中參與投票
4、集羣中只要有半數以上節點存活,zookeeper集羣就能正常服務
5、全局數據一致:每個server保存一份相同的數據副本,client無論連接到哪個server,數據都是一致的
6、更新請求順序進行,來自同一個client的更新請求按其發送順序依次執行
7、數據更新原子性,一次數據更新要麼成功,要麼失敗
8、實時性,在一定的時間範圍內,client能讀到最新數據
Znode類型
短暫(ephemeral)
臨時目錄節點
臨時順序編號目錄節點
持久(persistent)
持久化目錄節點
持久化順序編號目錄節點
七、監聽器原理
1、main()線程
2、創建zkClient
3、getChildren("/" , true)
4、Client:ip:port:/path
5、"/"路徑數據發生變化
6、process()
八、監聽服務器節點動態上下線案例
需求:某分佈式系統中,主節點可以有多臺,可以動態上下線,任意一臺客戶端都能實時感知到主節點服務器的上下線
分析
1、服務端啓動時去註冊信息(創建都是臨時節點)
2、客戶端啓動就去getChildren,獲取到當前在線服務器列表,並且註冊監聽
3、服務器節點下線
4、服務器節點上下線事件通知就會發給客戶端
5、客戶端回調process() {重新再去獲取服務器列表,並註冊監聽}