https://www.apache.org/dyn/closer.cgi/zookeeper/,下載最新的ZooKeeper程序,當前最新版本是3.5.5,要求JDK在1.8以上。java
將下載的apache-zookeeper-3.5.5-bin.tar.gz文件使用命令tar -xzvf 解壓到 /usr/java 目錄,並將原目錄名修改成zookeeper-3.5.5。node
進入zookeeper-3.5.5目錄並建立兩個子目錄 data 和logs。git
# mkdir data logs # echo 建立一個惟一的zookeeper實例號,我是用IP最後一個字節 # cd data # vim myid // 輸入 128 後保存退出 128 # echo 複製 zoo_sample.cfg 爲 zoo.cfg # cp zoo_sample.cfg zoo.cfg # 修改參數 dataDir # vim zoo.cfg dataDir=/var/lib/zookeeper
而後修改 /etc/profile,增長修改相應的環境變量github
# vim /etc/profile export PGDATA=/usr/java/postgres/data ZOOKEEPER_HOME=/usr/java/zookeeper-3.5.5 PATH=$ZOOKEEPER_HOME/bin:$PATH export ZOOKEEPER_HOME PATH # zkServer.sh start //啓動服務 # zkServer.sh status //查看服務狀態 # zkServer.sh stop //中止服務
Zookeeper使用的默認端口是2181,能夠在conf/zoo.cfg中修改這個端口號。安裝完成後,須要在防火牆開啓端口數據庫
# firewall-cmd --zone=public --add-port=2181/tcp –permanent # firewall-cmd –reload
建立自動啓動的腳本apache
# cd /etc/rc.d/init.d # touch zookeeper # chmod +x zookeeper # vim zookeeper #!/bin/bash #chkconfig:2345 10 90 #description:service zookeeper #set java environment JAVA_HOME=/usr/java/jdk8u222-b10 JRE_HOME=/usr/java/jdk8u222-b10/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin export JAVA_HOME JRE_HOME CLASS_PATH PATH export PGDATA=/usr/java/postgres/data ZOOKEEPER_HOME=/usr/java/zookeeper-3.5.5 PATH=$ZOOKEEPER_HOME/bin:$PATH export PATH ZOOKEEPER_HOME su root ${ZOOKEEPER_HOME}/bin/zkServer.sh "$1" // 添加到啓動腳本 # chkconfig --add zookeeper // 手工啓動 # service start zookeeper
命令行鏈接到zookeeper編程
# zhCli.sh -server 127.0.0.1:2181vim
關於 zookeper的經常使用使用命令百度便可或者用help命令查看。bash
在Windows上,能夠安裝zkui這個ZooKeeper的客戶端,下載網址:https://github.com/echoma/zkui/wiki/Download 。服務器
下載解壓後,直接運行 zkui.exe,彈出來鏈接頁面。
在Host部分輸入ZooKeeper的地址和端口,點擊Login按鈕後,左邊窗口列出Root下的全部zNode。使用比較簡單,本身摸索幾分鐘就都會了。
在評估、開發、測試環境,使用一臺ZooKeeper就能夠了,但在生產環境應該配置爲多點複製模式。同一個應用多臺服務器複製部署的狀況,術語叫 quorum,全部的服務器使用相同的配置文件。
複製模式部署,最少須要三臺服務器,而且服務器的總數最好是奇數。複製模式部署,配置文件 conf/zoo.cfg同單點模式差很少,有一些不一樣,如:
dataDir=/var/lib/zookeeper clientPort=2181 tickTime=2000 initLimit=5 syncLimit=2 server.128=zoo1:2888:3888 server.129=zoo2:2888:3888 server.130=zoo3:2888:3888 |
在配置文件中,initLimit是集羣中ZooKeeper Server鏈接到leader的超時時間;syncLimit是服務器的超時時間。這兩個參數,使用的時間單位都是tickTime,initLimit值爲5,最終表明的是10秒;syncLimit值爲2,最終表明的是4秒。
列表server.X構成了整個ZooKeeper服務,當服務啓動的時候,會讀取data/myid文件,獲取本身的編號。
在server後面有兩個端口號:"2888"和"3888"。ZooKeeper服務器之間使用這兩個端口進行通訊。若是使用同一臺機器安裝多個ZooKeeper實例搭建集羣,每一個實例應該使用不一樣的端口,如:2888:3888/2889:3889/2890:3890;另外,每一個實例的dataDir和clientPort也應該不一樣。
ZooKeeper使用層級命名空間,相似一個分佈式文件系統。區別在於目錄節點也能夠綁定數據,相似於一個文件系統,一個文件同時也是一個目錄。ZooKeeper不支持相對路徑。Unicode字符均可以出如今名稱中,除了下面的一些特例:
在ZooKeeper樹中,每個節點就是一個znode。Znode包括一個stat結構,含數據修改的版本號,以及acl版本號,時間戳。每次一個znode節點的數據發生變化,版本號都會增長。當客戶端讀取數據時,也會把數據的版本號一併取回去。當客戶端嘗試修改或刪除一個znode時,須要提供嘗試修改節點的版本號。若是提供的版本號同系統中當前的版本號不一致,更新失敗。(相似於數據庫的樂觀鎖實現)
ZNodes是程序訪問的實體,有幾個須要瞭解的特性:
經過多種方式跟蹤時間
節點的Stat結構有以下屬性
ZooKeeper的全部讀操做getData()、getChildren()和exists()都有一個備選參數:設置watch。ZooKeeper Watch的定義:是一次性的觸發器,當數據發生變化時,向設置了watch的客戶端發送消息。有三個關鍵點:
ZooKeeper使用ACL控制節點的讀寫權限。父子節點的讀寫權限是獨立的,不遞歸。
ZooKeeper支持的幾種權限:
ZooKeeper內置的受權對象