遇見ZooKeeper:初識

0. 什麼是ZooKeeper

ZooKeeper 是一個開源的分散式,它的設計目標是將那些複雜且容易出錯的分散式協同服務封裝起來,抽象出一個高效可靠的原語集,並以一系列簡單的介面提供個用戶使用。

ZooKeeper 有幾大特徵:

易用

ZooKeeper 的理解和使用成本都很低,它提供的是一種層級式的命名空間,這一點和標準的文件系統類似。

可靠

ZooKeeper 服務可以支援集群模式,並且能夠輕鬆擴展,客戶端可以連接到任意一個伺服器,都能夠獲得服務。

有序

ZooKeeper 的節點是可以保證有序的。每一個更新操作都會被標記一個序號,ZooKeeper 執行的時候會按照順序執行。

快速

ZooKeeper 在讀多寫少的應用場景中可以實現快速響應。這是因為 ZooKeeper 本身的部署架構是主從模式,主節點可以響應讀寫請求,而從節點只能響應讀請求。當讀寫比例大於10:1時,ZooKeeper 就可以利用擴展能力改善集群的響應速度。

ZooKeeper架構圖

介紹完了 ZooKeeper 的整體情況,我們再來看看 ZooKeeper 的另一個比較重要的概念——節點(Node)。

ZooKeeper 的節點叫做Znode,可以分為兩種:一種是持久性的,一種是臨時性的。每一個 Znode 都可以存儲數據,Znode 的更新是以版本更新的形式迭代的。因此,客戶端接收數據的同時還會接收到版本資訊。

ZooKeeper 臨時節點的生命周期是與 session 相關的,當 session 處於活躍狀態時,臨時節點會一直存在,當 session 消亡時,臨時節點會被刪除。

Session

ZooKeeper 客戶端在和 Server 端進行連接的時候,會創建一個 session,客戶端可以主動關閉 session。當 ZooKeeper 服務端節點沒有在指定時間內收到客戶端消息的話,服務端也會關閉 session。如果建立連接出錯,ZooKeeper 客戶端也會自動和其他服務端節點嘗試建立新的連接。

1. 安裝 ZooKeeper

ZooKeeper 的安裝方式非常簡單,首先到官網下載 ZooKeeper 的安裝包,然後解壓安裝包。

接著是修改配置文件,進入目錄apache-zookeeper-3.6.2-bin/conf,從 zoo_sample.cfg 文件複製出來一個名為 zoo.cfg 的配置文件,修改dataDir=/data/zookeeper,這個目錄用於存儲 ZooKeeper 的數據。配置好之後,我們就可以啟動 ZooKeeper 了,不過為了更好的使用 ZooKeeper 命令,我們把 ZooKeeper 相關命令配置到 PATH 中。

啟動 ZooKeeper

現在就可以啟動 ZooKeeper 了。只需要使用下面這個命令即可。

zkServer.sh start

啟動之後,我們來看一下 ZooKeeper 有沒有報錯,我們來到 ZooKeeper 目錄下的 logs 目錄,輸入命令

grep -E -i "((exception)|(error))" *

如果沒有輸出,說明 ZooKeeper 啟動沒有報錯。

接著查看對2181埠的監聽

netstat -an | grep 2181

正常監聽的話,我們就可以使用客戶端進行連接了。

體驗 ZooKeeper 命令

在確保 ZooKeeper 服務端啟動沒有問題後,我們使用客戶端進行連接。

zkCli

連接時會有上圖所示的日誌輸出。

連接好之後可以輸入命令

ls -R /

這個命令用來查看 ZooKeeper 現有的節點。

/
/zookeeper
/zookeeper/config
/zookeeper/quota

最初只有幾個 ZooKeeper 自帶的目錄。

這裡可以使用 create /app 命令來創建一個名為 app 的目錄。

2. 小結

對於 ZooKeeper 的初印象到這裡就結束了,目前我已經對 ZooKeeper 有了一個大概的了解,並且能夠順利在本機安裝 ZooKeeper,對於 ZooKeeper 的命令也有一定的了解。

後面我們會對 ZooKeeper 常見的應用進行介紹。

Tags: