1、官网下载最新版本zookeeper,解压。
2、在一台机器上安装设置不同端口实现伪分布式。
(1)、将 zookeeper/conf 目录下zoo_sample.cfg文件复制三份,zoo1.cfg/zoo2.cfg/zoo3.cfg。设置镜像数据目录、日志目录、端口。$num$表示机器编号
# 镜像数据目录
dataDir=/tmp/zookeeper/$num$
#日志位置
dataLogDir=D:\\log\\zookeeper\\$num$
# 客服端端口
clientPort=2181/2182/2183
添加集群配置:
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
(2)、修改命令加载伪分布配置。将 zookepper/bin 目录下zkServer.cmd复制三份,zkServer1.cmd/zkServer2.cmd/zkServer3.cmd。设置加载配置文件。
set ZOOCFG=..\conf\zoo1.cfg
(3)、cmd进入 zookeeper/bin 分别启动 zkServer1.cmd/zkServer2.cmd/zkServer3.cmd。启动时会报错,因为集群中其他机器还没有启动。所有都启动之后就不会报错了。
(4)、java 测试
public class ZkTest { private static final int TIME_OUT = 3000; private static final String HOST = "localhost:2181"; public static void main(String[] args) throws Exception { Watcher myWatcher = new Watcher() { @Override public void process(WatchedEvent watchedEvent) { System.out.println("节点数据发生变化"); } }; ZooKeeper zookeeper = new ZooKeeper(HOST, TIME_OUT, myWatcher); System.out.println("=========创建节点==========="); if (zookeeper.exists("/test", false) == null) { zookeeper.create("/test", "znode1".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); } System.out.println("=============查看节点是否安装成功==============="); System.out.println(new String(zookeeper.getData("/test", false, null))); System.out.println("=========修改节点的数据=========="); String data = "zNode2"; zookeeper.setData("/test", data.getBytes(), -1); System.out.println("========查看修改的节点是否成功========="); System.out.println(new String(zookeeper.getData("/test", false, null))); System.out.println("=======删除节点=========="); zookeeper.delete("/test", -1); System.out.println("==========查看节点是否被删除============"); System.out.println("节点状态:" + zookeeper.exists("/test", false)); //宋佳燚测试 //zookeeper.create("/宋佳燚", "宋佳燚".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); //System.out.println(new String(zookeeper.getData("/宋佳燚", false, null))); if(zookeeper.exists("/宋佳燚",false) != null){ zookeeper.delete("/宋佳燚", -1); } if(zookeeper.exists("/宋佳燚1",true) != null) { zookeeper.delete("/宋佳燚1", -1); } zookeeper.create(new String("/宋佳燚1".getBytes(),"utf-8"), "宋佳燚1".getBytes("utf-8"), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println(new String(zookeeper.getData("/宋佳燚1",false,null))); zookeeper.setData(new String("/宋佳燚1".getBytes(),"utf-8"), "宋佳燚修改".getBytes("utf-8"), -1); System.out.println(new String(zookeeper.getData("/宋佳燚1",true,null))); zookeeper.setData(new String("/宋佳燚1".getBytes(),"utf-8"), "宋佳燚修改2".getBytes("utf-8"), -1); System.out.println(new String(zookeeper.getData("/宋佳燚1",false,null))); //生成临时节点 zookeeper.create("/临时节点", "临时测试数据".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); Thread.sleep(1000*5); //zookeeper.delete("/宋佳燚1", -1); zookeeper.close(); } }