-
ZooKeeper:分布式应用程序的分布式协调服务,配置维护、组服务、分布式消息队列、分布式通知/协调等。ZooKeeper允许分布式进程通过与标准文件系统类似组织的共享分层名称空间相互协调。名称空间由数据寄存器(称为znode)组成,ZooKeeper数据保存在内存中,ZooKeeper名称空间中的每个节点都由一个路径标识。/dubbo/service
-
Znode结构
zookeeper的每一个节点叫做一个Znode,Znode兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。每个Znode由3部分组成:
① state:此为状态信息, 描述该Znode的版本, 权限等信息
② data:与该Znode关联的数据
③ children:该Znode下的子节点
节点类型
1):永久节点
2):临时节点 -
节点属性:它用来管理调度数据,比如分布式应用中的配置文件信息、状态信息、汇集位置等等。每个Znode的数据大小至多1M,
cZxid: 是节点的创建时间所对应的Zxid格式时间戳(Create)。
mZxid:是节点的修改时间所对应的Zxid格式时间戳(Mofify)。
pZxid:这个节点就和子节点有关啦!是与 该节点的子节点(或该节点)的最近一次 创建 / 删除 的时间戳对应。
实现中Zxid是一个64为的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个 新的epoch。低32位是个递增计数。
① version:节点数据版本号
② cversion:子节点版本号
③ aversion:节点所拥有的ACL版本号 -
数据访问:
ZooKeeper中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表)不会被子节点继承,这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。 -
启动zookeeper
1.在zookeeper-3.4.5\conf目录下找到zoo_sample.cfg ,复制一份并改名为zoo.cfg
2.在zoo.cfg中配置
clientPort=2181 #服务端口默认2181
dataDir=F:/zookeeper-3.4.5/data # 数据快照保存地址
dataLogDir=F:/zookeeper-3.4.5/log #日志保存地址
注意: 地址可自定义,不要出现中文否则一闪而过
3.启动 zkServer.cmd / linux下执行bin / zkServer.sh启动
4.启动zkCli.cmd 执行ls / 可以看到[zookeeper] / linux下执行 $ bin / zkCli.sh -server 127.0.0.1:2181
客户端常用命令:
help 查看帮助,可以查看命令
ls /path 查看目录 例如:ls / ls/dubbo
create /path data 创建一个新的znode例如: create /zknode1 mydata
get / path 获取一个znode的详情 例如: get / zkNode1
set / path 改变一个znode的数据 例如 set /zknode1 mydata2
delete / path 删除一个znode 例如: delete /zknode1
getAcl /path 获取znode权限信息 getAcl /test
setAcl /path 设置znode的权限信息
sync 使客户端的znode视图与zookeeper同步 sync / -
临时节点:只要创建znode的会话处于活动状态,就会存在这些znode。当会话结束时,znode被删除。
-
节点类型:
CreateMode.PERSISTENT 永久节点
CreateMode.PERSISTENT_SEQUENTIAL 永久并且有序的节点
CreateMode.EPHEMERAL 临时节点,会话断开会被自动删除
CreateMode.EPHEMERAL_SEQUENTIAL 临时并且有序的节点
SEQUENTIAL节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的 -
集群时至少3个节点 集群用到这个特性加入集群生成临时节点 连接断开被删除
集群选举都先选自己再选看到的最小的版本号 ,加入集群 作为leader -
watcher分为两大类:data watches和child watcher。getData()和exists()上可以设置data watches,getChildren()上可以设置child watcher。经验总结
创建zookeeper的时候也可以设置Watcher
成功创建zookeeper客户端连接会触发创建时设置的Watcher
setData()会触发data watches;
create()会触发data watches和child watches;
delete()会触发data watches和child watches.
当集群里某服务挂了,就会触发Mywatcher的自定义操作,leader不在重新选举,在:就删除挂的不在分发给挂的,
对字节点和节点数据进行监听 -
ACL它只针对当前节点,对子节点没有任何影响。
ZooKeeper 支持以下权限:
CREATE: 能创建子节点
READ:能获取节点数据和列出其子节点
WRITE: 能设置节点数据
DELETE: 能删除子节点
ADMIN: 能设置权限
ZooKeeper 客户端有3种标准的ACL:
OPEN_ACL_UNSAFE :任何应用程序在节点上可进行任何操作,能创建、列出和删除它的子节点。对任何应用程序
READ_ACL_UNSAFE是只读的
CREATE_ALL_ACL赋予了节点的创建者所有的权限,在创建者采用此ACL创建节点之前,已经被服务器所认证(例如,采用 “ digest”方案)。
zookeeper
最新推荐文章于 2023-08-03 22:51:05 发布