ZK是什么,提供了什么功能,具体命令
ZooKeeper 是一个的分布式协调服务,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁等功能
ZooKeeper 主要是用来协调服务的,而不是用来存储业务数据的,所以不要放比较大的数据在 znode 上,ZooKeeper 给出的上限是每个结点的数据大小最大是 1M。
场景:
- 分布式锁 : 通过创建唯一节点获得分布式锁,当获得锁的一方执行完相关代码或者是挂掉之后就释放锁。
- 命名服务 :可以通过 ZooKeeper 的顺序节点生成全局唯一 ID
- 数据发布/订阅 :通过 Watcher 机制 可以很方便地实现数据发布/订阅。当你将数据发布到 ZooKeeper 被监听的节点上,其他机器可通过监听 ZooKeeper 上节点的变化来实现配置的动态更新。
结点类型:
- 持久(PERSISTENT)节点 :一旦创建就一直存在即使 ZooKeeper 集群宕机,直到将其删除。
- 临时(EPHEMERAL)节点 :临时节点的生命周期是与 客户端会话(session) 绑定的,会话消失则节点消失 。并且,临时节点只能做叶子节点 ,不能创建子节点。
- 持久顺序(PERSISTENT_SEQUENTIAL)节点 :除了具有持久(PERSISTENT)节点的特性之外, 子节点的名称还具有顺序性。比如
/node1/app0000000001、/node1/app0000000002。 - 临时顺序(EPHEMERAL_SEQUENTIAL)节点 :除了具备临时(EPHEMERAL)节点的特性之外,子节点的名称还具有顺序性。
结点属性:
- stat :状态信息
- data : 节点存放的数据的具体内容
[zk: 127.0.0.1:2181(CONNECTED) 6] get /dubbo # 该数据节点关联的数据内容 data1111 -- # 下面是该数据节点的一些状态信息,其实就是 Stat 对象的格式化输出 cZxid = 0x2 --创建时的事务ID ctime = Tue Nov 27 11:05:34 CST 2018 创建时间 mZxid = 0x2 最后一次更新的事务ID mtime = Tue Nov 27 11:05:34 CST 2018 最后一次更新的时间 pZxid = 0x3 该节点的子节点列表最后一次修改时的事务 id,只有子节点列表变更才会更新 pZxid,子节点内容变更不会更新 cversion = 1 子节点版本号,当前节点的子节点每次变化时值增加 1 dataVersion = 0 数据节点内容版本号,节点创建时为 0,每更新一次节点内容(不管内容有无变化)该版本号的值增加 1 aclVersion = 0 节点的 ACL 版本号,表示该节点 ACL 信息变更次数 ephemeralOwner = 0x0 创建该临时节点的会话的 sessionId;如果当前节点为持久节点,则 ephemeralOwner=0 dataLength = 0 数据节点内容长度 numChildren = 1 当前节点的子节点个数
权限问题:
ZooKeeper 采用 ACL(AccessControlLists)策略来进行权限控制,类似于 UNIX 文件系统的权限控制。
对于 znode 操作的权限,ZooKeeper 提供了以下 5 种:
- CREATE : 能创建子节点
- READ :能获取节点数据和列出其子节点
- WRITE : 能设置/更新节点数据
- DELETE : 能删除子节点
- ADMIN : 能设置节点 ACL 的权限
其中尤其需要注意的是,CREATE 和 DELETE 这两种权限都是针对 子节点 的权限控制。
对于身份认证,提供了以下几种方式:
- world : 默认方式,所有用户都可无条件访问。
- auth :不使用任何 id,代表任何已认证的用户。
- digest :用户名:密码认证方式: username:password 。
- ip : 对指定 ip 进行限制。
具体命令: 因为zk使用的是树形结构存储数据,只有绝对路径,因此需要加 / 以表示文件目录
创建结点: create /node1 “node1” create /node1/node1.1 123 /结点名称 结点内容
修改:set /node1 "set node1"
查看目录结点:ls / get /
浙公网安备 33010602011771号