Zookeeper 一 基礎知識以及簡單命令

Zookeeper工作機制

Zookeeper從設計模式角度來理解:是一個基於觀察者模式的分佈式服務管理框架,它負責存儲和管理大家都關心的數據,然後接受觀察着的註冊,一旦這些數據的狀態發生變化,Zookeeper講講負責通知已經在Zookeeper上註冊的那些觀察者作出響應的反應。

Zookeeper特點

  1. 一個領導者(Leader),多個跟隨者(Follower)組成的集羣
  2. 集羣中只要有半數以上節點存活,Zookeeper集羣就能夠正常服務
  3. 全局數據一致,每個Server保存一份相同的數據副本,Client無論連接到哪個Server,數據都是一致的
  4. 更新請求順序進行,來自同一個Client的更新請求按其發送順序依次執行
  5. 數據更新原子性,一次數據更新要麼成功,要麼失敗
  6. 實時性,在一定時間範圍內,Client能讀到最新數據

Zookeeper數據結構

zookeeper數據模型的結構與Unix文件系統很類似,整體上可以看作是一棵樹,每個節點稱做一個ZNode。每一個ZNode默認能夠存儲1MB的數據,每個ZNode都可以通過其路徑唯一標識。

Zookeeper應用場景

 (一).統一命名服務:在分佈式環境下,經常需要對應服務進行統一命名,便於識別。

 (二). 統一配置管理 

         1.在分佈式環境下,配置文件同步非常常見

 一般要求一個集羣中,所有節點的配置信息是一致的,比如Kafka集羣。

 對配置文件修改後,希望能夠快速同步到各個節點上。

2.配置管理可交由ZooKeeper實現

可講配置信息寫入ZooKeeper上的一個Znode

各個客戶端服務器監聽這個Znode

 一旦Znode中的數據被修改,ZooKeeper將通知各個客戶端服務器

(三).統一集羣管理

可根據節點實時狀態作出一些調整

可將節點信息寫入ZooKeeper上的Znode

監聽這個ZNode可獲取它的實時狀態變化

(四).服務器節點動態上下線:客戶端能實時洞察到服務器上下線的變化

(五).軟負載均衡:記錄每臺服務器的訪問數,讓訪問數最少的服務器取處理最新的客戶端請求

 

Zookeeper內部原理:

選舉機制:

(1)半數機制:集羣中半數以上的機器存活,集羣可用。所以Zookeeper適合安裝奇數臺服務器。

(2)Zookeeper雖然在配置文件中並沒有制定Master和Slave。但是Zookeeper工作時,是有一個節點爲Leader,其他則爲Follower,Leader是通過內部的選舉機制臨時產生的。

   (3)以一個簡單的例子來說明整個選舉的過程

  假設有五臺服務器組成的Zookeeper集羣,他們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,在存放數據量這一點上,都是一樣的。那麼就是。5/2+1=3 這個節點當選leader

節點類型:

持久(Persistent):客戶端和服務器斷開連接後,創建的節點不刪除

短暫(Ephemeral):客戶端和服務器斷開連接後,創建的節點自己刪除

持久化目錄節點

客戶端與Zookeeper端開連接後,該節點依舊存在

持久化順序編號目錄節點

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

創建Znode時設置順序標識,znode名稱後會附加一個值,順序號是一個單調遞增的計數器,由父節點維護。

注意:在分佈式系統中,順序號可以被用於爲所有的事件進行全局排序,這樣客戶端可以通過順序號推斷時間的順序。

臨時目錄節點

客戶端與Zookeeper斷開連接後,該節點被刪除

臨時順序編號目錄節點

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

Zookeeper單機模式

version: '3.1'

services:
    zoo1:
        image: zookeeper:3.4.10
        restart: always
        hostname: zoo1
        ports:
            - 2181:2181
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888

注:3.5和3.4的配置不同如果下載最新版本請查看官方文檔並修改

啓動:

docker-compose up -d

簡單命令操作:

查看help:

 查看節點信息: ls /

 查看詳細節點信息: ls2 /

創建節點信息: create

獲取節點信息get:

創建短暫節點create -e  :

退出後再次連接查看短暫節點是否存在:

 創建帶序號的節點create -s :

如果與啊來沒有序號節點,序號從0開始依次遞增。如果原節點下已有2個節點,則在排序時從2開始。

修改節點值: set

節點參數變化監聽: get path [watch]

打開另一個cli開始監聽:

從原cli修改數據:

查看監聽 cli:

再次修改:

此時監聽不在有效:

 監聽路徑變化:ls path [watch]

監聽、修改、查看與監聽值同理:

 刪除節點 delete:

 遞歸刪除節點 rmr :

 節點不爲空則使用delete刪除,需要使用rmr進行遞歸刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章