zookeeper是一個爲分佈式應用提供一致性服務的軟件,它是開源的Hadoop項目的一個子項目,並根據google發表的一篇論文來實現的。zookeeper爲分佈式系統提供了高笑且易於使用的協同服務,它能夠爲分佈式應用提供至關多的服務,諸如統一命名服務,配置管理,狀態同步和組服務等。zookeeper接口簡單,咱們沒必要過多地糾結在分佈式系統編程難於處理的同步和一致性問題上,你可使用zookeeper提供的現成(off-the-shelf)服務來實現來實現分佈式系統額配置管理,組管理,Leader選舉等功能。html
首先須要安裝java環境(這裏不詳細寫)java
zookeeper集羣的安裝,準備三臺服務器server1:192.168.94.132,server2:192.168.94.131,server3:192.168.94.130linux
tar -zxvf zookeeper-3.4.12.tar.gz
解壓完成後在目錄~下會發現多出一個目錄zookeeper-3.4.12,從新命令爲zookeeperapache
>zoo.cfg cat >zoo.cfg<<EOF tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper/zkdata dataLogDir=/data/zookeeper/zkdatalog clientPort=12181 server.1=192.168.94.132:12888:13888 server.2=192.168.94.131:12888:13888 server.3=192.168.94.130:12888:13888 EOF
解釋說明
tickTime:這個時間是做爲 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。
dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。
clientPort:這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。默認是2181
initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 52000=10 秒
syncLimit:這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是22000=4 秒
server.A=B:C:D:編程
建立myid文件
在三個linux機器上剛剛建立的data目錄下新建一個myid文件並打開服務器
132 上 echo "1" >myid 與server.1保持一致 131 上 echo "2" >myid 與server.2保持一致 130 上 echo "3" >myid 與server.3保持一致
依次啓動server1,server2,server3的zookeepersession
/usr/local/zookeeper/bin/zkServer.sh start 輸出 ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
檢查看是否啓動socket
ps -ef|grep zookeeper
查看狀態(在每一個服務器上執行0分佈式
/usr/local/zookeeper/bin/zkServer.sh status 輸出狀態是leader或者follower
測試zookeeper是否正常工做,在server1上執行如下命令oop
在其中一個server上執行 /usr/local/zookeeper/bin/zkCli.sh -server 192.168.94.132:12181
輸出
2019-04-06 05:44:31,475 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root 2019-04-06 05:44:31,475 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper/bin 2019-04-06 05:44:31,477 [myid:] - INFO [main:ZooKeeper@441] - Initiating client connection, connectString=192.168.94.132:12181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@69d0a921 Welcome to ZooKeeper! JLine support is enabled 2019-04-06 05:44:31,576 [myid:] - INFO [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@1028] - Opening socket connection to server 192.168.94.132/192.168.94.132:12181. Will not attempt to authenticate using SASL (unknown error) 2019-04-06 05:44:31,866 [myid:] - INFO [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@878] - Socket connection established to 192.168.94.132/192.168.94.132:12181, initiating session [zk: 192.168.94.132:12181(CONNECTING) 0] 2019-04-06 05:44:31,938 [myid:] - INFO [main-SendThread(192.168.94.132:12181):ClientCnxn$SendThread@1302] - Session establishment complete on server 192.168.94.132/192.168.94.132:12181, sessionid = 0x1000004a7db0000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null
這裏集羣搭建完畢
能夠用「jps」查看zk的進程,這個是zk的整個工程的main
[root@localhost bin]# jps 1732 QuorumPeerMain 1881 Jps
參考:https://www.cnblogs.com/luotianshuai/p/5206662.html