Zookeeper的特性和节点数据类型

暂时理解概念:存储少量数据的基于内存的数据库;文件系统数据结构+监听通知机制;
在zk中没有相对路径这种说法,只有绝对路劲
四种类型的znode(节点);
1、PERSISTENT(persistent)持久化目录节点;
即使客户端与zk断开连接,该节点依然存在,只要不手动删除该节点,他将永远存在;
2、PERSISTENT_SEQUENTIAL(persistent_sequential)持久化顺序编号目录节点;
在持久化目录节点基础上,zk给该节点名称进行顺序编号;
3、EPHEMERAL(ephemeral)临时目录节点;
客户端与zk断开连接后,该节点就会被删除;(session超时会被服务器自动清除)
4、EPHEMERAL_SEQUENTIAL(ephemeral_sequential)­临时顺序编号目录节点
5、Container节点(3.5.3版本新增,如果该节点下面没有子节点,会被zk定期自动清除(60s检查一次))
6、TTL节点(默认禁用,不稳定)
监听通知机制
客户端监听他关系的节点(目录)
1、注册节点,节点被删除、修改,会通知客户端;
2、注册目录,目录有子节点删除、创建都会通知客户端
注意:所有通知都是一次性的;
安装Zookeeper;
1、先安装jdk(要求jdk1.8)
2、下载并解压zk;
启动zk命令:(在bin文件夹下面执行)./zkServer.sh start …/conf/zoo.cfg (zoo.cfg是自己将原有的配置文件复制一份默认配置文件名:zoo_sample.cfg,保证原始配置)

tickTime=2000 最小时间单位 2秒
initLimit=10 集群时间同步 10*上面最小时间单位,也就是20秒
syncLimit=5 心跳检测时间
dataDir=/tmp/zookeeper 事务日志配置文件
clientPort=2181 端口号,客户端根据这个端口号来访问;

启动zk命令:
连接zk命令:./bin/zkCli.sh(本机),./bin/zkCli.sh -server 192.168.xxx.xxx:端口(非本机)
关闭命令:kill -9 进程号即可

create
-s: 顺序节点
-e: 临时节点
-c: 容器节点(容器节点必须要有子节点否则会被zk自动删除,容器就是文件夹)
-t: 可以给节点添加过期时间,默认禁用,需要通过系统参数启用

create,get,set.delete 增,查,改,删;
create /a xxx 添加节点a,他的值为xxx
get /a,set /a bbb ,delete /a
ls / 查看当前目录下都有啥 (ls + path查看目录下都有什么)
所有的路径都是绝对路径,没有相对路径这种说法;

create -s /seq/a [a0000000000, a0000000001, a0000000002] 执行三次后得到的结果(不加a也没事)
在seq目录下创建以a开头的顺序节点;

查看节点状态 stat /节点名
cZxid = 0x2 创建节点的事务id (Zxid的值)
ctime = Sun Dec 27 15:21:35 CST 2020 节点创建时间
mZxid = 0x2 最后修改节点的事务id
mtime = Sun Dec 27 15:21:35 CST 2020 最近修改节点时间
pZxid = 0x2 最后添加或删除子节点的事务id(子节点列表发生改变才会发生改变)
cversion = 0 子节点结果集的版本
dataVersion = 0 当前数据版本
aclVersion = 0 节点acl版本
ephemeralOwner = 0x0 是临时节点时表示该节点session ID,如果不是临时节点该字段为0;
dataLength = 0 节点数据字段的长度
numChildren = 0 节点的子节点数量
事件监听机制:
针对节点的监听:节点做出改变后马上通知我们节点做出改变后,对应的注册立即被移除,事件监听时一次性的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201228194255502.png
在这里插入图片描述
直接-w的话不能用
get -w /lyd1 获取节点的值,并且监听该节点。改变节点后立刻就有通知发出,再次改变节点不会再有通知;
stat ‐w /path // 对节点进行监听,且获取元数据信息
针对目录的监听,目录
当监听目录时,其子节点的值修改并不会引起通知,只有创建或者删除时才会通知
ls -w /path 针对该目录进行监听
在这里插入图片描述
zk事件类型:
None: 连接建立事件
NodeCreated: 节点创建
NodeDeleted: 节点删除
NodeDataChanged:节点数据变化
NodeChildrenChanged:子节点列表变化
DataWatchRemoved:节点监听被移除
ChildWatchRemoved:子节点监听被移除
ACL权限控制
权限控制分为三部分:权限模式,权限对象,权限信息;
可以通过系统参数数zookeeper.skipACL修改不再进行权限检测,没有权限控制速度快
组成如:scheme🆔permission
scheme(权限模式):设置IP给予授权
范围验证:
如:“ip:192.168.88.3” 单个
如:“ip:192.168.88.1/50” 一组
口令验证
客户端传送:”username/password“,服务端会对密码部分加密
super权限:客户端可以对zk的节点做任意的修改;
权限对象:如以上的IP,IP地址字段,使用口令和super则时对用户名,如果是world则是授权系统种所有的用户
权限信息:zk定义了5种创建权限;
针对数据节点
创建(c:create),更新写(w.wirte),读取权限(r.read),删除权限(d.delete),(a.admin)管理者权限对前面四种权限进行修改
命令
getAcl:获取某个节点的acl权限
在这里插入图片描述
该节点为world,允许授权系统中所有用户操作,操作方式cdrwa,5种都行;
setAcl:设置某个节点的acl权限信息
在shell种设置授权ID
在这里插入图片描述
+7K83PhyQ3ijGj0ADmljf0quVwQ=
在这里插入图片描述在创建节点的时候设置权限;
create /xsn yyy digest:user1:+7K83PhyQ3ijGj0ADmljf0quVwQ=:rw
创建 /节点名 节点信息 用户类型权限:用户名:授权ID:读写
添加权限后再次查看报错
在这里插入图片描述
能对该节点访问的只有user1;
访问前需要登陆,我们添加授权信息
在这里插入图片描述
addauth digest user1:pass1
添加授权信息
查看当前权限 get /xsn
在这里插入图片描述
以明文的方式添加授权信息:
create /xsn2 xxx auth:user1:pass1:rw
IP授权:
setAcl /nodeip ip:192.168.109.128:cdwra
create /nodeip data ip:192.168.109.128:cdwra
setAcl /nodeip ip:192.168.109.128:rw,ip:192.168.109.123:r (多个IP授权)
网段192.168.109.128/188 网段也能配置

zk的数据在内存存在的形式

ConcurrentHashMap<String, DataNode> nodes =new ConcurrentHashMap<String, DataNode>();
//这里的String就是节点名,DataNode就是节点了
WatchManager dataWatches = new WatchManager();
WatchManager childWatches = new WatchManager();
public class DataNode implements Record {
            byte data[];
            Long acl;
            public StatPersisted stat;
            private Set<String> children = null;
        }
        //节点的信息包括权限信息,状态信息,还有值

事务日志
每次事务操作都会zk都会写事务日志,可配置,如果没有配置
那么默认在zoo.cfg(我们之前复制的一份)的
在这里插入图片描述
事务日志默认在这个文件夹中,(dataDir是一定要配置的)
也可以单独配置使用dataLogDir(可以不配置)
在这里插入图片描述
log.1是事务的日志:每一次事务都会去更新,内存中持久化的日志
预分配
snapshot.0是快照:
在这里插入图片描述
在lib目录下运行命令:java -cp slf4j-api-1.7.25.jar:zookeeper-3.5.8.jar:zookeeper-jute-3.5.8.jar org.apache.zookeeper.server.LogFormatter /export/install/apache-zookeeper-3.5.8-bin/data/version-2/log.1
即可查看log.1日志

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值