zookeeper配置zoo.cfg及客户端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bless2015/article/details/90059116
tickTime=2000     #时间单位(一个单位时间长度)

initLimit=10   #最终结果需要乘以tickTime   表示leader等待follower0启动并完成数据同步的时间,当数据量太大时需要把这个数改大

syncLimit=5 #表示5个tickTime时间,表示leader和follow节点进行心跳检测的时间

dataDir=/tmp/zookeeper  #数据快照文件目录

dataLogDir=/tmp/zookeeper_log  #事务日志文件

clientPort=2181	#客户端和服务端建立连接端口号

Zookeeper中的一些概念
zookeeper的数据类型和文件系统类似,每一个节点为znode,是zookeeper中的最小数据单元,每一个znode上都可以保存数据和挂载子节点,从而构成一个层次化的树形结构

持久化节点:节点创建后,会一直存在zookeeper服务器上,指导主动删除
持久化有序节点:每个节点都会为它的子节点维护一个顺序
临时接点:每一个客户端与服务器连接会建立一个回话(session),这个回话就是一个临时接点,当回话失效后,该节点自动清理
临时有序节点:就是在临时节点上多了顺序性

会话
NOT CONNECT --> CONNECTING --> CONNECTED --> CLOSED

Watch特性
zookeeper提供了分布式数据发布和订阅功能,既然有订阅就需要有监控数据的变化,这就是watch,zookeeper允许客户端向服务端注册一个监听,当服务端触发指定事件时,会触发watcher,服务端会向客户端发送一个事件通知。
watcher的通知时一次性的,一旦触发一次通知后,该watcher就失效了。

ACL
提供控制节点的访问权限的功能,有效的保证zookeeper中数据的安全性,避免误操作导致的事故。
CREATE /READ/WRITE/DELETE/ADMIN

zookeeper命令

创建节点:create [-s] [-e] path data acl
-s表示是否有序
-e表示是否为临时节点,临时结点下不能挂子节点。
默认情况下是持久节点
1、create命令,必须从根节点开始创建,不支持递归创建节点

[zk: localhost:2181(CONNECTED) 1] create /mic 123
Created /mic

[zk: localhost:2181(CONNECTED) 1] create /mic 123
Created /mic

2、get命令
get path [watch]

[zk: localhost:2181(CONNECTED) 7] get /mic
123
cZxid = 0x400000003
ctime = Fri May 10 00:03:41 PDT 2019
mZxid = 0x400000003
mtime = Fri May 10 00:03:41 PDT 2019
pZxid = 0x400000004
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

3、set命令
set path data [version]

[zk: localhost:2181(CONNECTED) 1] set /mic micf
cZxid = 0x400000003
ctime = Fri May 10 00:03:41 PDT 2019
mZxid = 0x40000000a
mtime = Fri May 10 00:10:33 PDT 2019
pZxid = 0x400000004
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1

version是个乐观锁的概念
数据库乐观锁有个version字段来控制数据行的版本号
先执行

get /mic

得到:

micf
cZxid = 0x400000003
ctime = Fri May 10 00:03:41 PDT 2019
mZxid = 0x40000000a
mtime = Fri May 10 00:10:33 PDT 2019
pZxid = 0x400000004
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 1

自动dataVersion=1
那么我在修改时,如果执行

set /mic 111 0

就会报错,最后的0指的是版本号

version No is not valid : /mic

set /mic 111 1

能够执行成功

4、delete 和create相反,必须先删除子节点
delete path [version]

[zk: localhost:2181(CONNECTED) 3] delete /nodes0000000001/node10000000000
[zk: localhost:2181(CONNECTED) 4] ls /nodes0000000001
[]
[zk: localhost:2181(CONNECTED) 5] delete /nodes0000000001
[zk: localhost:2181(CONNECTED) 6] ls /
[zookeeper, mic]

5、state信息
表示节点的状态信息

[zk: localhost:2181(CONNECTED) 4] stat /mic
cZxid = 0x400000003
ctime = Fri May 10 00:03:41 PDT 2019
mZxid = 0x400000014
mtime = Fri May 10 00:19:31 PDT 2019
pZxid = 0x400000004
cversion = 1			#表示子节点的版本号 childVersion
dataVersion = 2		#数据权限
aclVersion = 0			#权限 表示权限的版本号
ephemeralOwner = 0x0
dataLength = 3
numChildren = 1

cversion = 1 #表示子节点的版本号 childVersion
dataVersion = 2 #数据权限
aclVersion = 0 #权限 表示权限的版本号

cZxid 节点创建时的事务id
mZxid 节点最后一次被更新时的事务id
pZxid 当前节点下的子节点最后一次被修改时的事务id

ctime 创建时间
mtime 修改时间

ephemeralOwner 创建临时节点的时候,会有一个sessionID,该值存储的就是sessionID
dataLength
numChildren

比如创建一个临时接点

[zk: localhost:2181(CONNECTED) 26] create -e /app 123
Created /app
[zk: localhost:2181(CONNECTED) 27] get /app 
123
cZxid = 0x40000001b
ctime = Fri May 10 00:33:14 PDT 2019
mZxid = 0x40000001b
mtime = Fri May 10 00:33:14 PDT 2019
pZxid = 0x40000001b
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x2000153e43a0003
dataLength = 3
numChildren = 0

可以看到ephemeralOwner已经有值了,当我ctrl+c关闭这个回话后,再从新进

[zk: localhost:2181(CONNECTED) 0] ls /
[app, zookeeper, sun, mic]
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper, sun, mic]

可以看到经过一个小的等待时间后,/app就已经被删除了。这是因为有一个回话重试机制,会保留一段时间。

follow不接收写请求
observer只被动接受数据同步

猜你喜欢

转载自blog.csdn.net/bless2015/article/details/90059116