2.4.1. 常见命令¶
默认配置文件 conf/zoo.cfg
:
tickTime=2000 # basic time unit(2000ms)
dataDir=/var/lib/zookeeper # 数据目录
dataLogDir = /var/lib/zklog # log目录, 默认和dataDir相同的设置.
clientPort=2181
replicated mode配置文件:
tickTime=2000 # zookeeper中使用的基本时间单位, 毫秒值
dataDir=/var/lib/zookeeper
dataLogDir=/var/log/zookeeper
clientPort=2181
initLimit=5 # follower和leader之间的最长心跳时间(基于tickTime),这儿是5*2000ms=10s
syncLimit=2 # leader和follower之间发送消息, 请求和应答的最大时间长度
server.1=<zoo1>:2888:3888 # 2888为该server和集群中的leader交换消息所使用的端口
server.2=<zoo2>:2888:3888 # 3888为选举leader时所使用的端口
server.3=<zoo3>:2888:3888
命令使用:
bin/zkServer.sh start //启动server
// client
bin/zkCli.sh -server 127.0.0.1:2181 // java
./cli_mt 127.0.0.1:2181 // c
// 命令使用
zk> help
zk> ls /
zk> create /<nodeName> <value>
zk> get /<nodeName>
zk> set /<nodeName> <value>
zk> delete /<nodeName> # 子结点为空
zk> rmr /<nodeName> # 级联删除
使用get命令获取指定节点的数据时, 同时也将返回该节点的状态信息, 称为Stat. 其包含如下字段:
czxid. 节点创建时的zxid.
mzxid. 节点最新一次更新发生时的zxid.
ctime. 节点创建时的时间戳.
mtime. 节点最新一次更新发生时的时间戳.
dataVersion. 节点数据的更新次数.
cversion. 其子节点的更新次数.
aclVersion. 节点ACL(授权信息)的更新次数.
ephemeralOwner. 如果该节点为ephemeral节点, ephemeralOwner值表示与该节点绑定的session id. 如果该节点不是ephemeral节点, ephemeralOwner值为0. 至于什么是ephemeral节点, 请看后面的讲述.
dataLength. 节点数据的字节数.
numChildren. 子节点个数.
节点类型:
1. persistent:
2. ephemeral: 临时性的, 如果创建该节点的session结束了, 该节点就会被自动删除. ephemeral节点不能拥有子节点. 虽然ephemeral节点与创建它的session绑定, 但只要该该节点没有被删除, 其他session就可以读写该节点中关联的数据. 使用-e参数指定创建ephemeral节点
zk> create -e /zookeeper/weiguo/<node1> <value1>
3. sequence:sequence节点既可以是ephemeral的, 也可以是persistent的. 创建sequence节点时, ZooKeeper server会在指定的节点名称后加上一个数字序列, 该数字序列是递增的. 因此可以多次创建相同的sequence节点, 而得到不同的节点. 使用-s参数指定创建sequence节点:
zk> create -s /zookeeper/weiguo/item value1
Created /zookeeper/weiguo/item000001
Watch监听:
1. ls命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的"子节点的增减", 以及"该znode本身的删除事件"
zk> ls /zookeeper true # 增加第二个参数true
zk> create /zookeeper/new <value>
WATCHER:
WatchEvent state:SyncConnected type:NodeChildrenChanged path:/zookeeper
Created /zookeeper/new
2. get命令的第一个参数指定znode, 第二个参数如果为true, 则说明监听该znode的更新和删除事件.