zookeeper使用总结文档 - 初级
Zookeeper笔记

Zookeeper笔记Zookeeper Note1. 什么是 Zookeeper?Zookeeper是⼀个开源的分布式应⽤程序协调系统, 是Google的Chubby的⼀个开源实现(两者有所不同), 他是集群的管理者, 监视着集群中各个节点的状态(源码中有使⽤Observer[观察者]模式), 并根据节点提交的反馈进⾏下⼀步合理操作。
最后, zookeeper将简单易⽤的接⼝和性能⾼效, 功能稳定的系统提供给⽤户。
客户端的读取请求可以被集群中的任意⼀台机器处理, 如果读取请求在节点上注册了监听器, 此监听器也是有所连接的zookeeper机器来处理。
对于写⼊请求, 这些请求会同时被发给其他zookeeper机器并且达成⼀致后, 请求才会返回成功。
因此, 随着zookeeper集群机器增多, 读取请求的吞吐量会提⾼但是写请求的吞吐量会下降。
Zookeeper的有序性: 所有的更新都是全局有序的, 每个更新都有⼀个唯⼀的时间戳(zxid[Zookeeper Transaction Id]), ⽽读取请求只会相对于更新有序, 也就是读取请求的返回结果中会带有该Zookeeper最新的zxid。
2. Zookeeper 提供了什么?⽂件系统通知机制3. Zookeeper ⽂件系统Zookeeper提供⼀个多层级的节点命名空间(namespace节点名: znode)。
这些节点都可以设置关联的数据, ⽽⽂件系统中只有⽂件节点可以存放数据⽽⽬录节点不⾏。
Zookeeper为了保证⾼吞吐量和低延迟, 在内存中维护了树状的⽬录结构, 该特性使得Zookeeper不能⽤于存放⼤量的数据, 每个节点的存放数据2上限为1M。
4. 四种znode 类型persistent - 持久化⽬录节点客户端与Zookeeper断开连接后, 该节点依旧存在persistent_sequential-持久化顺序编号⽬录节点客户端并与zookeeper断开连接后, 该节点依旧存在, 只是Zookeeper给该节点名称进⾏顺序编号ephemeral - 临时⽬录节点客户端与zookeeper断开连接后, 该节点被删除ephemeral_sequential - 临时顺序编号⽬录节点客户端与zookeeper断开连接后, 该节点被删除, 只是Zookeeper给该节点名称进⾏顺序编号5. Zookeeper 通知机制客户端(client)会对某个znode建⽴⼀个watcher事件, 当该node发⽣变化时, 这些client会受到Zookeeper的通知, 然后client可以根据znode变化来做出业务上的改变等。
zookeeper应用实例教程 02.Zookeeper集群搭建、命令行Client操作

Node Watches zookeeper实例教程:/goods380.html
欢迎访问我们的官方网站
ቤተ መጻሕፍቲ ባይዱ
从入门到精通Zookeeper
2、Zookeeper集群搭建、命令行Client操作
讲师:Cloudy(北风网版权所有)
集群最好是奇数台容灾性好一些,由于允许不过半节点挂点: 比如5台允许挂掉2台, 4台只能允许挂掉一台
stat
zk中每一个znode的状态结构由以下域组成: czxid: 创建这个znode的 zxid. mzxid: 最后一次修改这个znode的zxid. ctime: 以毫秒为单位,这个znode创建的时间. mtime: 以毫秒为单位, 最后一次修改这个znode的时间. version: 这个znode被修改的次数. cversion:这个znode子节点被修改的次数. aversion:这个znode ACL被修改的次数. ephemeralOwner: 如果这是一个临时节点, 存储的是session的id.如果不是临时的, 是0. dataLength:这个znode的数据长度. numChildren:这个znode的子节点的数量.
ZooKeeper之zkCli.sh客户端的命令使用

ZooKeeper之zkCli.sh客户端的命令使⽤zkCli.sh的使⽤ZooKeeper服务器简历客户端./zkCli.sh -timeout 0 -r -server ip:port./zkCli.sh -timeout 5000 -server 192.9.200.242:2181-r :即使ZooKeeper服务器集群⼀般以上的服务器当掉,也给客户端体统读服务h 显⽰所有命令ls path:查看某个节点下的所有⼦节点信息ls / :列出根节点下所有的⼦节点信息stat path :获取指定节点的状态信息状态信息分析:czxid 创建该节点的事物IDctime 创建该节点的时间mZxid 更新该节点的事物IDmtime 更新该节点的时间pZxid 操作当前节点的⼦节点列表的事物ID(这种操作包含增加⼦节点,删除⼦节点) cversion 当前节点的⼦节点版本号dataVersion 当前节点的数据版本号aclVersion 当前节点的acl权限版本号ephemeralowner 当前节点的如果是临时节点,该属性是临时节点的事物ID dataLength 当前节点的d的数据长度numchildren 当前节点的⼦节点个数get path 获取当前节点的数据内容ls2 path :是ls 和 stat两个命令的结合create [-s] [-e] path data acl-s 表⽰是顺序节点-e 标识是临时节点path 节点路径data 节点数据acl 节点权限注:临时节点在客户端结束与服务器的会话后,⾃动消失quit :退出客户端set path data [version] :修改当前节点的数据内容如果指定版本,需要和当前节点的数据版本⼀致delete path [version] 删除指定路径的节点如果有⼦节点要先删除⼦节点rmr path 删除当前路径节点及其所有⼦节点setquota -n|-b val path 设置节点配额(⽐如限制节点数据长度,限制节点中⼦节点个数)-n 是限制⼦节点个数 -b是限制节点数据长度超出配额后,ZooKeeper不会报错,⽽是在⽇志信息中记录tail zookeeper.outlistquota path 查看路径节点的配额信息delquota [-n|-b] path 删除节点路径的配额信息connect host:port 和 clost在当前连接中连接其他的ZooKeeper服务器和关闭服务器history 和 redo cmdno :查看客户端这次会话所执⾏的所有命令和执⾏指定历史命令。
Zookeeper基础命令操作

Zookeeper基础命令操作基础命令操作启动zk服务./zkServer.sh start复制代码[root@localhost bin]# ./zkServer.shZooKeeper JMX enabled by defaultUsing config: /usr/home/zookeeper-3.4.11/bin/../conf/zoo.cfgUsage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}# 提⽰要以./zkCli.sh start 启动zk./zkCli.sh start复制代码查看zk的运⾏状态./zkServer.sh status 由于我已经配置了zk的集群,所以此处显⽰状态为leader[root@localhost bin]# ./zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /usr/home/zookeeper-3.4.11/bin/../conf/zoo.cfgMode: leader客户端链接zk[root@localhost bin]# ./zkCli.sh......WatchedEvent state:SyncConnected type:None path:null[zk: localhost:2181(CONNECTED) 0]help 查看客户端帮助命令复制代码[zk: localhost:2181(CONNECTED) 0] helpZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistoryredo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acladdauth scheme authquitgetAcl pathcloseconnect host:port[zk: localhost:2181(CONNECTED) 1]复制代码ls 查看ls 查看命令(niocoder是我测试集群创建的节点,默认只有zookeeper⼀个节点)复制代码[zk: localhost:2181(CONNECTED) 1] ls /[niocoder, zookeeper][zk: localhost:2181(CONNECTED) 2] ls /zookeeper[quota][zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota[]复制代码get 获取节点数据和更新信息get内容为空cZxid :创建节点的idctime :节点的创建时间mZxid :修改节点的idmtime :修改节点的时间pZxid :⼦节点的idcversion : ⼦节点的版本dataVersion :当前节点数据的版本aclVersion :权限的版本ephemeralOwner :判断是否是临时节点dataLength :数据的长度numChildren :⼦节点的数量复制代码[zk: localhost:2181(CONNECTED) 7] get /zookeeper #下⾯空⾏说明节点内容为空cZxid = 0x0ctime = Thu Jan 01 00:00:00 UTC 1970mZxid = 0x0mtime = Thu Jan 01 00:00:00 UTC 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1[zk: localhost:2181(CONNECTED) 8]复制代码stat 获得节点的更新信息复制代码[zk: localhost:2181(CONNECTED) 8] stat /zookeepercZxid = 0x0ctime = Thu Jan 01 00:00:00 UTC 1970mZxid = 0x0mtime = Thu Jan 01 00:00:00 UTC 1970pZxid = 0x0cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1复制代码2 ls命令和stat命令的整合复制代码[zk: localhost:2181(CONNECTED) 10] ls2 /zookeeper[quota]cZxid = 0x0ctime = Thu Jan 01 00:00:00 UTC 1970mZxid = 0x0mtime = Thu Jan 01 00:00:00 UTC 1970cversion = -1dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 1[zk: localhost:2181(CONNECTED) 11]复制代码create 创建节点create [-s] [-e] path data acl 可以注意⼀下各个版本的变化复制代码#创建merryyou节点,节点的内容为merryyou[zk: localhost:2181(CONNECTED) 1] create /merryyou merryyouCreated /merryyou#获得merryyou节点内容[zk: localhost:2181(CONNECTED) 3] get /merryyoumerryyoucZxid = 0x200000004ctime = Sat Jun 02 14:20:06 UTC 2018mZxid = 0x200000004mtime = Sat Jun 02 14:20:06 UTC 2018pZxid = 0x200000004cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 0复制代码create -s 创建顺序节点⾃动累加# 创建顺序节点,顺序节点会⾃动累加[zk: localhost:2181(CONNECTED) 2] create -s /merryyou/sec seqCreated /merryyou/sec0000000001[zk: localhost:2181(CONNECTED) 3] create -s /merryyou/sec seqCreated /merryyou/sec0000000002set path data [version] 修改节点复制代码[zk: localhost:2181(CONNECTED) 6] get /merryyoumerryyoucZxid = 0x200000004ctime = Sat Jun 02 14:20:06 UTC 2018mZxid = 0x200000004mtime = Sat Jun 02 14:20:06 UTC 2018pZxid = 0x200000009cversion = 4dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 8numChildren = 2# 修改节点内容为new-merryyou[zk: localhost:2181(CONNECTED) 7] set /merryyou new-merryyoucZxid = 0x200000004ctime = Sat Jun 02 14:20:06 UTC 2018mZxid = 0x20000000amtime = Sat Jun 02 14:29:23 UTC 2018pZxid = 0x200000009cversion = 4dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 12numChildren = 2#再次查询,节点内容已经修改[zk: localhost:2181(CONNECTED) 8] get /merryyounew-merryyoucZxid = 0x200000004ctime = Sat Jun 02 14:20:06 UTC 2018mZxid = 0x20000000amtime = Sat Jun 02 14:29:23 UTC 2018pZxid = 0x200000009cversion = 4dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 12numChildren = 2#set 根据版本号更新 dataVersion 乐观锁[zk: localhost:2181(CONNECTED) 9] set /merryyou test-merryyou 1cZxid = 0x200000004ctime = Sat Jun 02 14:20:06 UTC 2018mZxid = 0x20000000bmtime = Sat Jun 02 14:31:30 UTC 2018pZxid = 0x200000009cversion = 4dataVersion = 2aclVersion = 0ephemeralOwner = 0x0dataLength = 13numChildren = 2#因为数据的版本号已经修改为2 再次使⽤版本号1修改节点提交错误[zk: localhost:2181(CONNECTED) 10] set /merryyou test-merryyou 1version No is not valid : /merryyou复制代码delete path [version] 删除节点复制代码[zk: localhost:2181(CONNECTED) 13] delete /merryyou/sec000000000sec0000000001 sec0000000002[zk: localhost:2181(CONNECTED) 13] delete /merryyou/sec0000000001[zk: localhost:2181(CONNECTED) 14] ls /merryyou[sec0000000002][zk: localhost:2181(CONNECTED) 15]#版本号操作与set类似 version复制代码watcher通知机制关于watcher机制⼤体的理解可以为,当每个节点发⽣变化,都会触发watcher事件,类似于mysql的触发器。
Javazookeeper图形化工具ZooInspector用法详解

三、ZooInspector的使用 2、运行zookeeper-dev-ZooInspector.jar 1 》解压,进入目录ZooInspector\build。 2》在build目录,按住shift键右键鼠标,在右键菜单出选择“在此处打开命令窗口”。
பைடு நூலகம்
3》 java -jar zookeeper-dev-ZooInspector.jar //执行成功后,会弹出java ui client。
3、点击左上角连接按钮,输入zk服务地址:ip:2181 点击OK,即可查看ZK节点信息
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
这篇文章主要介绍了java调用计算机摄像头拍照实现过程解析文中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友可以参考下
Javazookeeper图形化工具 ZooInspector用法详解
一、在window,使用我们先打开Zookeeper,目录bin下的zkServer.cmd,把Zookeeper运行起来
Zookeeper—学习笔记(一)

Zookeeper—学习笔记(⼀)1、Zookeeper基本功能(增删改查;注册,监听)两点: 1、放数据(少量)。
2、监听节点。
注意: Zookeeper中的数据不同于数据库中的数据,没有表,没有记录,没有字段; Zookeeper中的数据是key-value对,key可以有⼦key value为⼆进制数据。
2、应⽤场景2.1、服务器上下线动态感知2.2、配置⽂件管理3、Zookeeper本⾝就是⼀个HA集群Zookeeper⾃⾝就是⼀个⼗分可靠的分布式系统。
这个分布式系统只有⼀个程序,进程:QuorumpeerMain,只不过这个进程在⼯作的时候有多种不同状态;3.1、zookeeper集群结构⽰意图3.2、⽩话谈选举过程-zookeeper的整体运⾏机制 leader和follower通信端⼝,集群内部⼯作端⼝2888 选举端⼝3888 假如集群中共的节点按照 myid 1,2,3,4,5 的顺序⼀次启动;id为1的节点最先启动,它启动之后想集群中的2888端⼝发出消息,此时没有leader在2888端⼝回应1号节点,1号节点就知道了,此时集群中是没有leader的,然后1号节点发起选举,不停的往3888端⼝发选举消息,并且告诉⼤家投他⾃⼰,也就是1号;此时id为2的节点启动,同样的第⼀件事也是向2888⼴播消息,没有⼈回应,知道没有leader,此时的1号节点不断的在3888宣传⾃⼰,2号节点收到3888端⼝的消息,发现集群中有个兄弟节点发起了,投票且投1号,2号节点查看⾃⼰的id后发现,我的id是2⽐1⼤啊,我投我⾃⼰,然后2号节点向3888端⼝不停的⼴播投2号;此时1号节点在⾃⼰的3888端⼝收到消息发现,有⼈投2号且id⽐我的⼤,那我也都2号;此时1号节点和2号节点都不停的往3888发起选举且投2号;就在这时候3号点启动,同样第⼀件事给集群2888⼴播消息,没有⼈回应,但是会收到3888端⼝的选举信息,经查看发现id都⽐我⼩(1<3 2<3),我要投⾃⼰3;往3888⼴播选举3号的消息;然后1号节点和2号节点收到消息后,发现⼜来了⼀个⼤的节点,那我们都投3吧,此时超过了半数( 3 > 5 / 2)节点,3号节点将⾃⼰的转台切换为leader,成功上位;此后4号节点和5号节点已启动就发现已经有leader了,⾃动变为follower; 有没有发现;节点发起选举时只会选举⾃⼰(⾃私),当发现有id⼤于⾃⾝的节点也参与选举时,他会⽆私的⽀持最⼤者(⽆私)。
ZooKeeperAPI的基本使用
ZooKeeperAPI的基本使⽤针对ZooKeeper的会话创建,节点创建、删除,数据读取、更新,权限控制等API进⾏简单的验证。
1、新建maven⼯程,添加依赖<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version><scope>test</scope></dependency>2、新建单元测试进⾏验证/*** 软件版权:流沙~~* 修改⽇期修改⼈员修改说明* ========= =========== =====================* 2020/1/14 liusha 新增* ========= =========== =====================*/package com.sand.zookeeper;import org.apache.zookeeper.AsyncCallback;import org.apache.zookeeper.CreateMode;import org.apache.zookeeper.KeeperException;import org.apache.zookeeper.WatchedEvent;import org.apache.zookeeper.Watcher;import org.apache.zookeeper.ZooDefs;import org.apache.zookeeper.ZooKeeper;import org.apache.zookeeper.data.Stat;import org.junit.Test;import java.util.List;import java.util.concurrent.CountDownLatch;/*** 功能说明:ZooKeeper Api 测试类* 开发⼈员:@author liusha* 开发⽇期:2020/1/14 9:58* 功能描述:会话创建,节点创建、删除,数据读取、更新,权限控制等*/public class ZooKeeperApi implements Watcher {private static Stat stat = new Stat();private static ZooKeeper zooKeeper = null;private static final String host = "127.0.0.1:2181";private static CountDownLatch countDownLatch = new CountDownLatch(1);private static final String hosts = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183";/*** ZooKeeper CreateMode节点类型说明:* 1.PERSISTENT:持久型* 2.PERSISTENT_SEQUENTIAL:持久顺序型* 3.EPHEMERAL:临时型* 4.EPHEMERAL_SEQUENTIAL:临时顺序型* <p>* 1、2种类型客户端断开后不会消失* 3、4种类型客户端断开后超时时间内没有新的连接节点将会消失*//*** ZooKeeper ZooDefs.Ids权限类型说明:* OPEN_ACL_UNSAFE:完全开放的ACL,任何连接的客户端都可以操作该属性znode* CREATOR_ALL_ACL:只有创建者才有ACL权限* READ_ACL_UNSAFE:只能读取ACL*//*** ZooKeeper EventType事件类型说明:* NodeCreated:节点创建* NodeDataChanged:节点的数据变更* NodeChildrenChanged:⼦节点的数据变更* NodeDeleted:⼦节点删除*//*** ZooKeeper KeeperState状态类型说明:* Disconnected:连接失败* SyncConnected:连接成功* AuthFailed:认证失败* Expired:会话过期* None:初始状态*//*** 接收事件通知** @param event 事件通知*/@Overridepublic void process(WatchedEvent event) {System.out.println("Receive WatchedEvent:" + event);try {if (Event.KeeperState.SyncConnected == event.getState()) {System.out.println("通知:会话连接成功");if (Event.EventType.None == event.getType() && null == event.getPath()) {System.out.println("进⼊会话初始状态");// 释放所有等待的线程countDownLatch.countDown();} else if (event.getType() == Event.EventType.NodeCreated) {System.out.println("节点创建通知:" + event.getPath());zooKeeper.exists(event.getPath(), true);} else if (event.getType() == Event.EventType.NodeDataChanged) {System.out.println("节点的数据变更通知:" + new String(zooKeeper.getData(event.getPath(), true, stat)));System.out.println("czxid=" + stat.getCzxid() + ",mzxid=" + stat.getMzxid() + ",version=" + stat.getVersion()); zooKeeper.exists(event.getPath(), true);} else if (event.getType() == Event.EventType.NodeChildrenChanged) {System.out.println("⼦节点的数据变更通知:" + zooKeeper.getChildren(event.getPath(), true));zooKeeper.exists(event.getPath(), true);} else if (event.getType() == Event.EventType.NodeDeleted) {System.out.println("节点删除通知:" + event.getPath());zooKeeper.exists(event.getPath(), true);} else {System.out.println("未知事件通知类型:" + event.getType());zooKeeper.exists(event.getPath(), true);}} else if (Event.KeeperState.Disconnected == event.getState()) {System.out.println("通知:会话连接失败");} else if (Event.KeeperState.AuthFailed == event.getState()) {System.out.println("通知:会话认证失败");} else if (Event.KeeperState.Expired == event.getState()) {System.out.println("通知:会话过期");} else {System.out.println("未知的通知状态:" + event.getState());}} catch (Exception e) {e.printStackTrace();}}/*** 创建会话(最基础的实例)** @throws Exception Exception*/@Testpublic void constructor_usage_simple() throws Exception {zooKeeper = new ZooKeeper(hosts, 5000, new ZooKeeperApi());System.out.println("ZooKeeper.state:" + zooKeeper.getState());// 所有线程执⾏完毕countDownLatch.await();System.out.println("ZooKeeper session会话创建完成。
Zookeeper(三)Spring整合Zookeeper【基础操作篇】
Zookeeper(三)Spring整合Zookeeper【基础操作篇】⼀、引⾔ 前两篇写了⼀些概念性的和在服务器上操作的信息,那么这⼀篇我们来学习如何⽤Spring来对Zookeeper做⼀个整合。
⾸先需要先简单介绍⼀些Curator这个客户端。
Curator Curator是Netflix公司开源的⼀套zookeeper客户端框架,解决了很多Zookeeper客户端⾮常底层的细节开发⼯作,包括基础操作、连接与重连、反复注册Watcher、分布式锁等等。
⼆、⼲货代码搞起来~POM<!--引⼊Zookeeper依赖和curator客户端【有梦想的肥宅】--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>5.0.0</version><exclusions><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.5.8</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>5.1.0</version></dependency>Zookeeper客户端⼯具类 我这⾥把初始化zk客户端的代码抽成了⼀个⼯具类来使⽤,减少重复代码:/*** Zookeeper客户端⼯具类** @author zhanghao* @date 2021/8/18*/public class ZookeeperClientUtil {/*** 获取Curator客户端【有梦想的肥宅】*/public static CuratorFramework getCuratorFramework() {//1、配置重试策略 5000:重试间隔 5:重试次数ExponentialBackoffRetry policy = new ExponentialBackoffRetry(5 * 1000, 5);//2、构造Curator客户端CuratorFramework client = CuratorFrameworkFactory.builder().connectString("这⾥填写⾃⼰zk的ip地址:2181").connectionTimeoutMs(60 * 1000).sessionTimeoutMs(60 * 1000).retryPolicy(policy).build();//3、启动客户端client.start();//4、输出信息System.out.println("zookeeper启动成功,获取到客户端链接");return client;}}基础操作测试类 当前类⽤于测试⼀些基础的zk操作,都是⾃⼰⼿打测试过的,直接拿⾛~/*** 基础操作测试类** @author有梦想的肥宅* @date 2021/8/18*/@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = CuratorBaseControlDemo.class)public class CuratorBaseControlDemo {//创建节点【有梦想的肥宅】@Testpublic void testCreate() throws Exception {CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();curatorFramework.create().withMode(CreateMode.PERSISTENT).forPath("/nodeForJava", "this is value!".getBytes());System.out.println("=========【有梦想的肥宅】节点创建成功========");}//获取节点值【有梦想的肥宅】@Testpublic void testGetData() throws Exception {CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();byte[] bytes = curatorFramework.getData().forPath("/nodeForJava");System.out.println("=========【有梦想的肥宅】获取到的节点值:" + new String(bytes) + "========");}//更新节点值【有梦想的肥宅】@Testpublic void testSetData() throws Exception {CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();curatorFramework.setData().forPath("/nodeForJava", "changed!".getBytes());byte[] bytes = curatorFramework.getData().forPath("/nodeForJava");System.out.println("=========【有梦想的肥宅】更新后节点的值:" + new String(bytes) + "========");}//删除节点【有梦想的肥宅】//PS:guaranteed() 强制删除//PS:deletingChildrenIfNeeded() 删除⼀个节点,并且递归删除其所有的⼦节点@Testpublic void testDelete() throws Exception {CuratorFramework curatorFramework = ZookeeperClientUtil.getCuratorFramework();String pathWithParent = "/nodeForJava";curatorFramework.delete().guaranteed().deletingChildrenIfNeeded().forPath(pathWithParent);System.out.println("=========【有梦想的肥宅】已成功删除节点:" + pathWithParent + "========");}}。
zookeeper整理后的资料
1.1zookeeper的部署和使用1.1.1系统描述ZooKeeper是一个高可用、高可靠的协同工作系统,分布式程序可以用ZooKeeper保存并更新关键共享状态。
Katta使用zookeeper保证主节点和搜索节点的有效性,指派索引文件给搜索节点,察觉搜索节点的失效等。
1.1.2安装和配置安装zookeeper也很简单,下载zookeeper-3.1.1.tar.gz,解压到/home/hezhiming/zookeeper-3.1.1。
zookeeper要部署到各台机器的相同目录下,且具有相同的配置文件。
Zookeeper 的配置文件主要有以下两个:1、/zookeeper -3.1.1/conf/zoo.cfg:# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/home/nutch/zookeeper-3.1.1/zookeeper-data# the port at which the clients will connectclientPort=3355# 2888,3888 are election portserver.1=devcluster01:2555:3555server.2=devcluster05:2555:3555server.3=devcluster06:2555:3555注明:2555端口号是zookeeper服务之间通信的端口,而3555是zookeeper 与其他应用程序通信的端口。
zookeeper笔记
一:首先需要配置ssh,并要保证每个之间都是互通的。
安装jdk并能保证javac可以直接打印输出(配置好环境变量)二:下载zookeeper,1.配置zookeeper;首先建立两个文件夹mkdir /usr/local/program/zk/zkdata ,mkdir /usr/local/program/zk/zkdataLog2.然后执行命令cd /usr/local/program/zk/zookeeper-3.4.6/conf/ 进入配置文件目录,拷贝一份配置文件cp zoo_sample.cfg zoo.cfg改名为zoo.cfg3.编辑配置文件修改配置(将端口改大的目的是为了防止冲突):4.# The number of milliseconds of each tick5.tickTime=20006.# The number of ticks that the initial7.# synchronization phase can take8.initLimit=109.# The number of ticks that can pass between10.# sending a request and getting an acknowledgement11.syncLimit=512.# the directory where the snapshot is stored.13.# do not use /tmp for storage, /tmp here is just14.# example sakes.15.dataDir=/usr/local/program/zk/zkdata16.dataLogDir=/usr/local/program/zk/zkdataLog17.# the port at which the clients will connect18.clientPort=1218119.# the maximum number of client connections.20.# increase this if you need to handle more clients21.#maxClientCnxns=6022.#23.# Be sure to read the maintenance section of the24.# administrator guide before turning on autopurge.25.#26.# /doc/current/zookeeperAdmin.html#sc_maintenance27.#28.# The number of snapshots to retain in dataDir29.#autopurge.snapRetainCount=330.# Purge task interval in hours31.# Set to "0" to disable auto purge feature32.#autopurge.purgeInterval=133.server.1=192.168.0.102:12888:1388834.server.2=192.168.0.103:12888:1388835.server.3=192.168.0.104:12888:1388836.37.进入zkdata目录,执行命令echo “1” > myid创建myid文件并输入值为138.依次在另外两台机器上执行同样的操作,myid的数值依次为2,339.配置成功,执行命令zkServer.sh start分别启动三台机器40.执行命令zkServer.sh status查看对应的状态发现出现:zookeeper Error contactingservice. It is probably not running错误41.执行命令:tail -f zookeeper.out查看到错误记录:2016-04-21 06:56:56,242 [myid:1] –WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0: 2181:Follower@89] –Exception when following the leader.NoRouteToHostException: No route to hostat .PlainSocketImpl.socketConnect(Native Method)at .AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at .AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java: 200)at .AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)at .SocksSocketImpl.connect(SocksSocketImpl.java:392)at .Socket.connect(Socket.java:579)at org.apache.zookeeper.server.quorum.Learner.connectToLeader(Learner.java:225) at org.apache.zookeeper.server.quorum.Follower.followLeader(Follower.java:71) at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:786) 42.经验证:防火墙的问题,执行命令service iptables stop关闭防火墙(如要永久关闭防火墙执行命令:chkconfig iptables off)43.重启机器,执行命令zkServer.sh status 分别查看每台机器的状态为leader、follower、follower则表明启动成功三:客户端命令首先说明一下如何打开zk服务端和客户端,cd到zk安装目录下,运行bin/zk Server.shstart即可启动服务端,运行bin/zkCli.sh –server ip:port即可启动客户端。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Zookeeper使用总结 2015年5月 李 梁 前言 1. 阅读对象 本手册面向对zookeeper技术感兴趣的读者,是使用当中的总结,希望能帮到你们。 目 录 第1章 ZOOKEEPER概述 ........................................................................................................................... 2 1.1 zookeeper介绍 .................................................................................................................................. 2 1.2 zookeeper特性 .................................................................................................................................. 2 第2章 ZOOKEEPER安装和配置 ............................................................................................................... 3 2.1.1 zookeeper安装......................................................................................................................... 3 2.1.2 zookeeper配置......................................................................................................................... 3 2.1.2.1 单机模式 ...................................................................................................................... 3 2.1.2.2 伪集群模式 .................................................................................................................. 3 2.1.2.3 集群模式 ...................................................................................................................... 4 第3章 ZOOKEEPER C API简介 ................................................................................................................ 6 3.1 Watches .............................................................................................................................................. 6 3.1.1 监视函数原型 .......................................................................................................................... 7 3.2 常用API ............................................................................................................................................ 7 3.2.1.1 zookeeper_init .............................................................................................................. 7 3.2.1.2 zookeeper_close ........................................................................................................... 8 3.2.1.3 zoo_create ..................................................................................................................... 8 3.2.1.4 zoo_wexists .................................................................................................................. 9 3.2.1.5 zoo_set ........................................................................................................................ 10 3.2.1.6 zoo_get ....................................................................................................................... 10 3.2.1.7 zoo_state ..................................................................................................................... 10 第4章 客户端C API编译 ........................................................................................................................... 12 4.1 Linux平台编译 ............................................................................................................................... 12 4.2 Window平台编译 ........................................................................................................................... 12 第5章 ZOOKEEPER客户端命令 ............................................................................................................. 13 5.1 命令行工具的常用操作 .................................................................................................................. 13 5.2 ZooKeeper 常用四字命令 .............................................................................................................. 13 第6章 ZOOKEEPER使用常见问题 ......................................................................................................... 15 第7章 附录 .................................................................................................................................................... 16 7.1 zookeeper初始化、销毁函数 ......................................................................................................... 16 7.2 zookeeper辅助函数......................................................................................................................... 16 7.3 zookeeper同步接口......................................................................................................................... 17 7.4 zookeeper异步接口......................................................................................................................... 18 7.5 zookeeper C API 总览 ..................................................................................................................... 20