下載地址:http://apache.dataguru.cn/zookeeperjava
選擇一個穩定版本進行下載,我這裏下載的是zookeeper-3.4.6版本。node
僞分佈式集羣:在一臺Server中,啓動多個ZooKeeper的實例。web
cd /usr rz -by tar xf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf cp zoo_sample.cfg zoo1.cfg cp zoo_sample.cfg zoo2.cfg cp zoo_sample.cfg zoo3.cfg
實例1的配置:
shell
vi zoo1.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper/d_1 clientPort=2181 dataLogDir=/usr/zookeeper-3.4.6/logs_1 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
實例2的配置:
數據庫
vi zoo2.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper/d_2 clientPort=2182 dataLogDir=/usr/zookeeper-3.4.6/logs_2 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
實例3的配置:
apache
vi zoo3.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper/d_3 clientPort=2183 dataLogDir=/usr/zookeeper-3.4.6/logs_3 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
mkdir /tmp/zookeeper/d_1 mkdir /tmp/zookeeper/d_2 mkdir /tmp/zookeeper/d_3 mkdir /usr/zookeeper-3.4.6/logs_1 mkdir /usr/zookeeper-3.4.6/logs_2 mkdir /usr/zookeeper-3.4.6/logs_3 echo "1" > /tmp/zookeeper/d_1/myid echo "2" > /tmp/zookeeper/d_2/myid echo "3" > /tmp/zookeeper/d_3/myid
/usr/zookeeper-3.4.6/bin/zkServer.sh start zoo1.cfg /usr/zookeeper-3.4.6/bin/zkServer.sh start zoo2.cfg /usr/zookeeper-3.4.6/bin/zkServer.sh start zoo3.cfg
jps #看到相似下面的進程就表示3個實例均啓動成功 13419 QuorumPeerMain 13460 QuorumPeerMain 13561 Jps 13392 QuorumPeerMain #若是未成功啓動,能夠到zookeeper.out文件中查看啓動失敗的日誌信息。
[root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo1.cfg JMX enabled by default Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo1.cfg Mode: follower [root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo2.cfg JMX enabled by default Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo2.cfg Mode: leader [root@localhost ~]# /usr/zookeeper-3.4.6/bin/zkServer.sh status zoo3.cfg JMX enabled by default Using config: /usr/zookeeper-3.4.6/bin/../conf/zoo3.cfg Mode: follower #發現實例2爲leader,實例1和實例3均爲follower
至此,一個ZK的僞分佈式集羣搭建完畢。api
須要引入zookeeper-3.4.6.jar和slf4j-api-1.61.jar這兩個jar包。
session
package com.cjw.demo; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.ZooDefs.Ids; public class ZooKeeperClient { public static void main(String[] args) throws Exception { Watcher watcher = new Watcher() { @Override public void process(WatchedEvent event) { System.out.println(event.toString()); } }; ZooKeeper zk = new ZooKeeper("192.168.157.22:2181", 3000, watcher); System.out.println("====建立節點"); zk.create("/cjw", "znode1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("====查看節點是否安裝成功"); System.out.println(new String(zk.getData("/cjw", false, null))); System.out.println("====修改節點的數據"); zk.setData("/cjw", "cjw2015".getBytes(), -1); System.out.println("====查看修改的節點是否成功"); System.out.println(new String(zk.getData("/cjw", false, null))); System.out.println("====刪除節點"); zk.delete("/cjw", -1); System.out.println("====查看節點是否被刪除"); System.out.println("節點狀態:" + zk.exists("/cjw", false)); zk.close(); } }
運行結果:分佈式
====建立節點 WatchedEvent state:SyncConnected type:None path:null ====查看節點是否安裝成功 znode1 ====修改節點的數據 ====查看修改的節點是否成功 cjw2015 ====刪除節點 ====查看節點是否被刪除 節點狀態:null
initLimit: follower鏈接並同步到leader的初始化鏈接時間,它是經過tickTime的倍數表示。當初始化鏈接 時間超過設置的時間時,則鏈接失敗。 syncLimit: follower和leader之間發送消息時請求和應答的時間長度,若是follower在設置的時間範圍內 不能和leader通訊,那麼該follower將被丟棄,它也是按tickTime的倍數進行配置的。 tickTime: 定義心跳的時間間隔, 注:zk的client和server之間也有和web開發相似的session的概念,而zk裏最小的session過時時間 就是tickTime的兩倍 dataDir: 存儲在內存中數據庫快照功能。 clientPort: 監聽客戶端鏈接的端口號 dataLogDir: zk運行的相關日誌寫入目錄,設定了配置,那麼dataLog裏日誌的目錄將無效,專門的日誌存放 路徑,對zk的性能和穩定性有好處。