zookeeper 基礎知識

定義: 開源的,分佈式的 爲分佈式應用提供協調服務的apache項目

從設計模式角度,zookeeper 是基於觀察者模式設計的分佈式服務管理框架。 負責管理和存儲大家都關心的數據。接受觀察者的註冊。 如果數據發生變化,zookeeper 會通知已經註冊的觀察者作出相應的響應

Zookeeper= 文件系統 + 監聽機制

Zookeeper 的特點:

  1. 一個leader ,多個follower 組成集羣
  2. 集羣中只要有半數存活,zk集羣就能正常工作
  3. 全局數據一致:每個Server 保存一份相同的數據副本。客戶端無論連接哪個server,獲取到的數據都一樣
  4. 來自同一個客戶端的更新請求按其發送順序,依次執行。
  5. 數據更新原子性,要麼成功,要麼失敗
  6. 實時性,在一定時間範圍內,客戶端能讀到最新數據。也就是服務之間同步數據的時間很短。(因爲數據量小)
zookeeper的數據結構

zookeeper 數據結構爲樹形結構,每個節點稱作一個ZNode。 每個ZNode默認存儲1M 的數據,每個ZNode 通過其路勁來標識。

zookeeper 單機模式安裝
  1. 安裝JDK ,加壓zookeeper 安裝包
  2. 將conf文件夾下的 zoo_sample.cfg 修改爲zoo.cfg
  3. 打開zoo.cfg 修改dataDir 路徑

啓動服務端: bin/zkServer.sh start
關閉服務端: bin/zkServer.sh stop

啓動客戶端: bin/zkCli.sh
退出: quit

zoo.cfg 中常用配置參數說明
  1. tickTime=2000 心跳時間,單位是毫秒。服務之間或者客戶端與服務器之間維持心跳的時間間隔
  2. initLimit=10 leader 與 Follower 之間初始連接時能容忍的最多連接數
    也就是10 個 tickTime(20 秒)
  3. syncLimit=5 Leader 與 Follower 之間最大的相應時間單位。 (10 秒)如果超過,Leader 會認爲Follower死掉,會從服務器中移除
  4. dataDir: 用於保存zookeeper 數據的目錄
  5. clientPort=2181 客戶端連接端口

zookeeper 內部原理

選舉機制
  1. 半數機制: 集羣中半數以上機器存活,集羣可用。 所以zk適合安裝奇數臺。(也就是說 如果有2個zookeeper,只要一個掛掉就不能用。因爲1 沒有 過半。所以2個zk的死亡容忍度爲0; 同理,要是有三個,掛掉1個,還有2個,過半了,所以3臺zk的死亡容忍度爲1 依次類推 4 -1 , 5-> 2 6->2 發現2n和2n-1 的死亡容忍度是一樣的。爲了高效就必須多增加一臺。)
  2. zookeeper 配置文件中沒有指定Master 和Slave ,但是zk工作時有一個節點是Leader,其他爲Follower。 Leader 是通過內部的選舉機制產生的

Leader 的選舉

1. 所有節點一啓動就先給自己投一票,然後給所有節點廣播投票信息。
2. 節點收到廣播的投票信息後,發現投給某個節點比投給自己好,就會更改自己的投票信息,並且廣播更改
3. 票數過半的節點作爲Leader
ZK 分佈式集羣部署
  1. 創建zkData目錄,在該目錄下創建myid文件,在文件中寫入與server對於的編號
  2. 修改conf/zoo_sample.cfg 文件爲zoo.cfg, 修改dataDir 路勁爲zkData 的路勁
  3. 在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 專門用於選舉的端口
  1. 啓動集羣: bin/zkServer.sh start
  2. 查看集羣狀態: bin/zkServer.sh status

歡迎學習大數據的同學加我微信,一起交流學習。