Zookeeper:一個用于分布式應用程序的分布式,開源的協調服務
ZooKeeper 公開了一組簡單的原語,分布式應用程序可以基于這些原語來實現統(tǒng)一命名服務、狀態(tài)同步服務、集群管理、分布式應用配置項的管理等
簡單來說 ZooKeeper = 文件系統(tǒng) + 監(jiān)聽通知機制
1.文件系統(tǒng)
ZooKeeper維護一個類似于文件系統(tǒng)的數據結構:

文件結構
每個子目錄項如 NameService 都被稱作 znode(目錄節(jié)點),和文件系統(tǒng)一樣,我們能夠自由的增加、刪除 znode,在一個 znode 下增加、刪除子 znode,唯一的不同在于 znode 是可以儲存數據的。
有四種類型的 znode:
-
PERSISTENT-持久化目錄節(jié)點
客戶端與zookeeper斷開連接后,該節(jié)點依舊存在 -
PERSISTENT_SEQUENTIAL-持久化順序編號目錄節(jié)點
客戶端與zookeeper斷開連接后,該節(jié)點依舊存在,只是Zookeeper給該節(jié)點名稱進行順序編號 -
EPHEMERAL-臨時目錄節(jié)點
客戶端與zookeeper斷開連接后,該節(jié)點被刪除 -
EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節(jié)點
客戶端與zookeeper斷開連接后,該節(jié)點被刪除,只是Zookeeper給該節(jié)點名稱進行順序編號
2.監(jiān)聽通知機制
客戶端注冊監(jiān)聽它關心的目錄節(jié)點,當目錄節(jié)點發(fā)生變化(數據改變、被刪除、子目錄節(jié)點增加刪除)時,zookeeper 會通知客戶端。
ZooKeeper單機模式配置安裝
配置文件
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
- tickTime:ZooKeeper使用的基本時間單位(毫秒)。它用于做心跳,并且最小會話超時將是tickTime的兩倍
- dataDir:存儲內存數據庫快照的位置,除非另有說明,否則存儲數據庫更新的事務日志。
- clientPort:用于監(jiān)聽客戶端連接的端口
簡單操作
啟動命令:zkServer.sh start
命令行連接:zkCli.sh
- 使用
ls命令來查看當前 ZooKeeper 中所包含的內容ls \ - 創(chuàng)建一個新的 znode ,使用
create /zkPro myData - 使用
get命令來查看上面創(chuàng)建的znode中是否存在對應的數據get /zkPro - 使用
set命令來對zk索關聯的字符串進行設置:set /zkPro myData123 - 刪除znode:
delete /zkPro
分布式搭建
三臺機器
配置文件
server.1=xxx.xxx.xxx.xxx:2888:3888
server.2=xxx.xxx.xxx.xxx:2888:3888
server.3=xxx.xxx.xxx.xxx:2888:3888
添加如下配置,啟動即可,需要在data路徑下添加 myid 文件配置id