Zookeeper 是一個分布式服務框架,是 Apache Hadoop 的一個子項目,主要用來解決分布式服務所遇到的問題,例如:狀態同步服務、集群管理等。
zookeeper = 文件系統 + 監聽通知機制
而 zookeeper 每個節點都稱之為 znode (目錄節點),znode 底下可以包含多個節點以及一個值
有四種類型的 znode
- PERSISTENT — 持久化
客戶端與 zookeeper 斷開連線後,節點依舊存在
- PERSISTENT_SEQUENTIAL — 持久話順序編號
與 PERSISTENT 類似,只是 zookeeper 給節點編號
- EPHEMERAL 臨時目錄節點
客戶端斷線後, 該節點即刻刪除
- EPHEMERAL_SEQUENTIAL 臨時順序編號
與 EPHEMERAL 類似, 只是 zookeeper 給節點編號
監聽通知機制
- 監聽他關注的目錄節點,當節點發生變化時, zookeeper 會通知客戶端。
zookeeper 可以時做出的功能如下
- 統一命名服務
- 集群管理
- 隊列管理
- 同步鎖
- 狀態同步服務
- 數據發布 / 訂閱
- Master 選舉
要在本機測試 zookeeper 可以 clone 此 github 專案
倘若要檢測是否有成功啟動成功, 可以先下 docker-compose ps 檢測 container 是否有運行起來
然後此 github 專案有安裝 zookeeper navigator webui 畫面, 可以使用
http://localhost:9090 即可看到畫面
上面的 192.168.xxx 可以使用 docker inspect 去查看 docker container 的 ip address
zookeeper 的基本操作
- 新進到一台 zookeeper 的 container
docker exec -it zookeeper_zoo1_1 bash
2. 執行 ziCli.sh
zkCli.sh
3. 使用 ls 看 root node 底下有什麼 znode
4. 創建一個 znode
ps: 在 root node 新建 test znode, 值為 demo
create /test demo
5. 查看 test node 的資料
get /test
6. 刪除節點
delete /test
zookeeper 參數說明
- tickTime
zookeeper 服務器之間抑或是客戶端與 zookeeper 之間的心跳時間
2. initLimit
初始化連接能忍受多少個心跳時間
3. syncLimit
Learder 與 Follower 之間發送消息, 請求和應答時間長度
4. dataDir
zookeeper 資料夾存放的路徑
5. clientPort
客戶端的 port
參考文件