zookeeper 基礎知識
時間 2021-07-12
標籤
zookeeper
註冊中心
定義: 開源的,分佈式的 爲分佈式應用提供協調服務的apache項目
從設計模式角度,zookeeper 是基於觀察者模式設計的分佈式服務管理框架。 負責管理和存儲大家都關心的數據。接受觀察者的註冊。 如果數據發生變化,zookeeper 會通知已經註冊的觀察者作出相應的響應
Zookeeper= 文件系統 + 監聽機制
Zookeeper 的特點:
- 一個leader ,多個follower 組成集羣
- 集羣中只要有半數存活,zk集羣就能正常工作
- 全局數據一致:每個Server 保存一份相同的數據副本。客戶端無論連接哪個server,獲取到的數據都一樣
- 來自同一個客戶端的更新請求按其發送順序,依次執行。
- 數據更新原子性,要麼成功,要麼失敗
- 實時性,在一定時間範圍內,客戶端能讀到最新數據。也就是服務之間同步數據的時間很短。(因爲數據量小)
zookeeper的數據結構
zookeeper 數據結構爲樹形結構,每個節點稱作一個ZNode。 每個ZNode默認存儲1M 的數據,每個ZNode 通過其路勁來標識。
zookeeper 單機模式安裝
- 安裝JDK ,加壓zookeeper 安裝包
- 將conf文件夾下的 zoo_sample.cfg 修改爲zoo.cfg
- 打開zoo.cfg 修改dataDir 路徑
啓動服務端: bin/zkServer.sh start
關閉服務端: bin/zkServer.sh stop
啓動客戶端: bin/zkCli.sh
退出: quit
zoo.cfg 中常用配置參數說明
- tickTime=2000 心跳時間,單位是毫秒。服務之間或者客戶端與服務器之間維持心跳的時間間隔
- initLimit=10 leader 與 Follower 之間初始連接時能容忍的最多連接數
也就是10 個 tickTime(20 秒)
- syncLimit=5 Leader 與 Follower 之間最大的相應時間單位。 (10 秒)如果超過,Leader 會認爲Follower死掉,會從服務器中移除
- dataDir: 用於保存zookeeper 數據的目錄
- clientPort=2181 客戶端連接端口
zookeeper 內部原理
選舉機制
- 半數機制: 集羣中半數以上機器存活,集羣可用。 所以zk適合安裝奇數臺。(也就是說 如果有2個zookeeper,只要一個掛掉就不能用。因爲1 沒有 過半。所以2個zk的死亡容忍度爲0; 同理,要是有三個,掛掉1個,還有2個,過半了,所以3臺zk的死亡容忍度爲1 依次類推 4 -1 , 5-> 2 6->2 發現2n和2n-1 的死亡容忍度是一樣的。爲了高效就必須多增加一臺。)
- zookeeper 配置文件中沒有指定Master 和Slave ,但是zk工作時有一個節點是Leader,其他爲Follower。 Leader 是通過內部的選舉機制產生的
Leader 的選舉
1. 所有節點一啓動就先給自己投一票,然後給所有節點廣播投票信息。
2. 節點收到廣播的投票信息後,發現投給某個節點比投給自己好,就會更改自己的投票信息,並且廣播更改
3. 票數過半的節點作爲Leader
ZK 分佈式集羣部署
- 創建zkData目錄,在該目錄下創建myid文件,在文件中寫入與server對於的編號
- 修改conf/zoo_sample.cfg 文件爲zoo.cfg, 修改dataDir 路勁爲zkData 的路勁
- 在zoo.cfg 添加以下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
erver.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
server.A=B:C:D
A 表示 第幾號服務器,和myid中寫的對應
B 表示該zookeeper 所在服務器地址
C Follower 與 Leader 通信的端口
D 專門用於選舉的端口
- 啓動集羣: bin/zkServer.sh start
- 查看集羣狀態: bin/zkServer.sh status
歡迎學習大數據的同學加我微信,一起交流學習。