zookeeper有單機、僞集羣、集羣三種部署方式,可根據本身對可靠性的需求選擇合適的部署方式。下邊對這三種部署方式逐一進行講解。html
進入要下載的版本的目錄,選擇.tar.gz文件下載linux
下載連接:http://archive.apache.org/dist/zookeeper/apache
使用tar解壓要安裝的目錄便可,以3.4.5版本爲例app
這裏以解壓到/usr/myapp,實際安裝根據本身的想安裝的目錄修改(注意若是修改,那後邊的命令和配置文件中的路徑都要相應修改)socket
tar -zxf zookeeper-3.4.5.tar.gz -C /usr/myapp
在主目錄下建立data和logs兩個目錄用於存儲數據和日誌:ui
cd /usr/myapp/zookeeper-3.4.5
mkdir data mkdir logs
在conf目錄下新建zoo.cfg文件,寫入如下內容保存:spa
tickTime=2000 dataDir=/usr/myapp/zookeeper-3.4.5/data dataLogDir=/usr/myapp/zookeeper-3.4.5/logs clientPort=2181
進入bin目錄,啓動、中止、重啓分和查看當前節點狀態(包括集羣中是何角色)別執行:rest
./zkServer.sh start ./zkServer.sh stop ./zkServer.sh restart
./zkServer.sh status
僞集羣模式就是在同一主機啓動多個zookeeper並組成集羣,下邊以在192.168.220.128主機上創3個zookeeper組集羣爲例。日誌
將經過第一大點安裝的zookeeper,複製成zookeeper1/zookeeper2/zookeeper3三份code
zookeeper1配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper1/data dataLogDir=/usr/myapp/zookeeper1/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper1的data/myid配置以下:
echo '1' > data/myid
zookeeper2配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper2/data dataLogDir=/usr/myapp/zookeeper2/logs clientPort=3181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper2的data/myid配置以下:
echo '2' > data/myid
zookeeper3配置文件conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper3/data dataLogDir=/usr/myapp/zookeeper3/logs clientPort=4181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.128:4888:5888 server.3=192.168.220.128:6888:7888
zookeeper3的data/myid配置以下:
echo '3' > data/myid
最後使用1.4的命令把三個zookeeper都啓動便可,啓動順序隨意沒要求。
集羣模式就是在不一樣主機上安裝zookeeper而後組成集羣的模式;下邊以在192.168.220.128/129/130三臺主機爲例。
將第1.1到1.3步中安裝好的zookeeper打包複製到129和130上,並都解壓到一樣的目錄下。
三個zookeeper的conf/zoo.cfg修改以下:
tickTime=2000 dataDir=/usr/myapp/zookeeper-3.4.5/data dataLogDir=/usr/myapp/zookeeper-3.4.5/logs clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.220.128:2888:3888 server.2=192.168.220.129:2888:3888 server.3=192.168.220.130:2888:3888
對於129和130,因爲安裝目錄都是zookeeper-3.4.5因此dataDir和dataLogDir不須要改變,又因爲在不一樣機器上因此clientPort也不須要改變
因此此時129和130的conf/zoo.cfg的內容與128同樣便可。
128 data/myid修改以下:
echo '1' > data/myid
129 data/myid修改以下:
echo '2' > data/myid
130 data/myid修改以下:
echo '3' > data/myid
最後使用1.4的命令把三個zookeeper都啓動便可,啓動順序隨意沒要求。
如下命令無論是單機、僞集羣、集羣模式都適用;僞集羣和集羣模式隨便鏈接其中一個zookeeper便可。
進入zookeeper的bin目錄,使用zkCli鏈接zookeeper:
./zkCli.sh # 默認鏈接localhost:2181,如需指定ip和端口可以使用以下形式 # ./zkCli.sh -server 192.168.220.128:2181
如下是zkCli中的簡單命令使用示例,總的而言zookeeper的組織結構相似於linux的目錄結構:
# 查看全部支持的命令。其實輸入任一條不支持的命令都會打印幫助 help # 查看目錄下有哪些節點。以根目錄爲例 ls / # 建立一個節點。 # 加-s表示建立順序節點,即會自動在給定的路徑後面再加上一個數字串,保證路徑不重複。 # 默認是持久節點,加-e是臨時節點 create /example_path "example_data" # 查看節點內容 # 返回第一行便是節點的內容,若是第一行空白或null那就說明該節點建立時就沒有值 # 後續的cZxid到numChildren都是該節點的一些屬性信息;其中numChildren標識該節點下有多少個子節點 get /example_path # 刪除一個沒有子節點的節點 delete /example_path # 遞規刪除節點及其全部子節點 rmr /example_path # 退出zkCli quit
應用鏈接zookeepr報錯:Session 0x0 for server 192.168.220.128/192.168.220.128:2181,unexpected error,closing socket connection and attempting reconnect;
先看端口可否telnet通,若是通則使用./zkServer.sh status查看zk是否確實已啓動,沒啓查看bin/zookeeper.out中的報錯。
bin/zookeeper.out中報錯:「zookeeper address already in use」;顯然端口被佔用,要麼是其餘進程佔用了配置的端口,要麼是上邊配置的clientPort和server中的端口有重複。
bin/zookeeper.out中報錯:Cannot open channel to 2 at election address /192.168.220.130:3888;這應該只是組成集羣的130節點未啓動,到130啓動起來zk即會正常。
參考:
http://coolxing.iteye.com/blog/1871009
https://zookeeper.apache.org/doc/r3.4.10/zookeeperStarted.html