目录概念ZK命令操作数据模型服务端命令客户端命令Java API操作Curator事件监听分布式锁ZK集群Leader选举搭建集群ZK核心理论概念ZK命令操作数据模型服务端命令./zkServer.sh start ./zkServer.sh stop ./zkServer.sh status ./zkServer.sh restart客户端命令./zkCli.sh-server127.0.0.1:2181#登录命令quit#退出命令ls/#查看根目录下子节点ls/dir1/dir2#查看指定目录下子节点create /test#创建test节点get /test#读取节点数据set/test hehe#设置节点数据delete /test#删除节点若包含子节点则无法删除deleteall /test#删除子树create-e/test#创建临时节点当前会话关闭时节点删除create-s/test#创建顺序节点create-es/test#创建临时顺序节点ls-s/test# 可以查看test节点的详细信息Java API操作Curator//创建基本节点带有数据没有数据时则默认客户端ip为数据client.create().forPath(/app1,hello);//设置节点类型为临时节点默认是持久化节点client.create().withMode(CreateMode.EPHEMEAL).forPath(/path);//创建多级节点client.create().creatingParentsIfNeed().forPath(/path);//查询节点获取节点数据client.getData().forPath(/app1);//查询子节点获取当前节点的子节点client.getChildren().forPath(/app1);//查询节点状态信息StatstatnewStat();client.getData().storingStatIn(stat).forPath(/app1);//修改节点数据client.setData().forPath(/app1,world);//根据版本信息修改数据法防止多个客户端同时对数据进行操作出现并发问题client.setData().withVersion(stat.getVersion()).forPath(/app2,hahha.getBytes());//删除带有子节点的节点client.delete().deletingChildrenIfNeed().forPath(/app3);//删除必须成功client.delete().guaranteed().forPath(/app4);//回调client.delete().inBackground(()-{}).forPath(/app5);事件监听监听特定节点//注册NodeCache对象监听单个节点finalNodeCachenodeCachenewNodeCache(client,/app1);//注册监听nodeCache.getListenable().addListener(()-{//获取修改后节点的数据byte[]datanodeCache.getCurrentData().getData();});//开启监听nodeCache.start(true);监听子节点//创建监听对象PathChildrenCachepathChildrenCachenewPathChildrenCache(client,/app2,true);nodeCache.getListenable().addListener(()-{//监听子节点的变化并且拿到变更后的数据PathChildrenCacheEvent.Typetypeevent.getType();if(type.equals(PathChildrenCacheEvent.Type.CHILD_UPDATED)){byte[]dataevent.getData().getData();}});pathChildrenCache.start();监听子树TreeCachetreeCachenewTreeCache(client,/app3);treeCache.getListenable().addListener(()-{});treeCache.start();分布式锁ZK集群Leader选举这里先比较Zxid再比较Serverid并且在开始选举时都会先投票给自己然后广播投票内容其他节点收到广播后再根据上述规则确定是否改变投票。搭建集群1.下载安装包然后解压创建data文件夹2.data文件夹下创建myid文件并写入id(1,2,3,...)3.配置zoo.cfg文件写入集群所有服务器ip:port格式如下 server.1127.0.0.1:2181#这里的1是写入myid里的id...4.配置zoo.cfg文件配置dataDir为刚创建的data文件夹5.启动zkZK核心理论