Zookeeper基础教程(三):Zookeeper连接使用—zkCli
上一篇介绍Zookeeper的安装,并介绍了使用ZooInspector连接Zookeeper,这里主要介绍以命令行的形式介绍Zookeeper
假如我们已经安装了Zookeeper集群,集群中的安装目录都是/opt/zookeeper-3.4.14,集群地址:
# 192.168.209.133 test1
# 192.168.209.134 test2
# 192.168.209.135 test3
端口都是默认的,客户端连接使用2182端口,节点间通信端口是2888,选举端口是3888
zkCli
介绍Zookeeper安装的时候,使用zkServer去启动Zookeeper,而启动了,我们是采用zkCli去连接Zookeeper,我们进入Zookeeper安装的根目录,我这里是/opt/zookeeper-3.4.14,输入:
# zkCli.sh -server host:port # 指定连接节点,默认host=localhost,port=2181,如:zkCli.sh -server test2:2181,表示连接test2节点
./bin/zkCli.sh
可以看到已连接Zookeeper,默认连接本地的(localhost:2181)
直接输入help命令
使用zkCli连接上Zookeeper后,就可以在zk的命令行进行操作了。整理一下,可分成4个部分来说明。
znode节点操作
znode是Zookeeper的数据节点,znode之间是类似于目录树的结构关系,对Zookeeper的操作一般都是对znode的操作,而对znode节点操作就是一般的crud操作
# znode节点操作部分
create [-s] [-e] path data acl # 创建一个znode节点,同时设置节点权限acl,-s表示创建有序节点,-e创建临时节点,如创建一个/mynode节点:create /mynode hello,另外znode需要按照层级去创建,如创建/node1/node2,需要县创建/node1再创建/node1/node2
stat path [watch] # 查看znode状态,如数据长度,时间戳等等,同时可以注册一个监听器
get path [watch] # 获取znode节点的数据,同时可以注册一个监听器,如:get /mynode
set path data [version] # 设置znode的数据,同时可以设置一个监听器,如:set /mynode "hello world"
ls path [watch] #列出znode的子节点,同时可以设置一个监听器,如:ls /
ls2 path [watch] #列出znode的子节点,同时可以设置一个监听器,如:ls2 /,与ls的区别是ls2还可以获取到子节点个数等等状态信息
delete path [version] #删除znode节点,注意路径为绝对路径,且不可删除拥有子节点的znode
rmr path #递归删除znode节点,与delete的区别是可以删除拥有子节点的znode
quota配额操作
quota配额机制就是对znode做一些限制,支持节点个数和空间大小(字节数)两种方式,不过貌似quota配额并不会阻止操作的进行,而只是抛出警告
# quota配额
setquota -n|-b val path #增加配额,-n是设置子节点的配额数量,-b是设置节点内容的长度
listquota path #列出节点配额信息
delquota [-n|-b] path #删除节点配额
ACL权限控制
当使用zkCli连接Zookeeper时,就是和Zookeeper集群开启了一次会话,而acl操作就是对会话权限进行控制的操作
#ACL权限控制
setAcl path acl #给已有节点赋予权限,其中acl是权限
getAcl path #查看节点的权限
# 在上面的创建节点操作中,我们也可以给节点赋予权限,如:
Zookeeper的acl
权限由[scheme : id :permissions]三部分组成,其中scheme是认证类型,id一般指的是账号,也就是权限所针对的对象,permissions表示对节点的空权限类型,而scheme和permissions有以下可选项:
Permissions可选项,在使用时,可以使用首字母进行简写(crwda):
CREATE:允许创建子节点;
READ:允许从节点获取数据并列出其子节点;
WRITE:允许为节点设置数据;
DELETE:允许删除子节点;
ADMIN:允许为节点设置权限。
Scheme可选项:
world:默认模式,所有客户端都拥有指定的权限。world下只有一个id选项,就是anyone,通常组合写法为world:anyone:[permissons];比如:setAcl /mynode world:anyone:crwda
auth:只有经过认证的用户才拥有指定的权限。通常组合写法为auth:user:password:[permissons],使用这种模式时,你需要先进行登录,之后采用auth模式设置权限时,user和password都将使用登录的用户名和密码;比如:setAcl /mynode auth:feng:123456:crwda
digest:只有经过认证的用户才拥有指定的权限。通常组合写法为digest
:user:BASE64(SHA1(password)):[permissons],这种形式下的密码必须通过SHA1和BASE64进行双重加密;比如:setAcl /mynode digest:feng:xHBaNtDKjaz0G0F0dq11735c9r8=:crwda
ip:限制只有特定IP的客户端才拥有指定的权限。通常组成写法为ip:182.168.0.168:[permissions];比如:setAcl /mynode ip:192.168.28.213:crwda
super:代表超级管理员,拥有所有的权限,需要修改Zookeeper启动脚本进行配置。
# auth模式和digest模式其实是一样的,区别可以理解为,auth模式使用的是明文密码,而digest使用的是密文密码(SHA1和BASE64),比如下面两种方式是等价的
setAcl /mynode auth:feng:123456:crwda
setAcl /mynode digest:feng:xHBaNtDKjaz0G0F0dq11735c9r8=:crwda
#这里说的等级是在使用setAcl命令为znode添加权限控制时,并非在使用addauth添加认证时
一般的,权限是给znode节点设置的,当使用zkCli连接到Zookeeper开启一个会话时,默认情况下是world认证模式,该模式下只能操作那些world认证模式权限的znode节点,要访问某个特定模式下的节点,就需要满足节点上设置的认证模式。
super模式用的少,一般可以忽略,ip模式即指定客户端,比如:
setAcl /mynode ip:192.168.209.134:crwda
这个表示当我们从192.168.209.134访问时才能访问到/mynode节点,否则会提示Authentication is not valid
然后我们到192.168.209.134上使用zkCli连接Zookeeper,发现成功访问到/mynode节点
对于auth模式和digest模式,就需要修改当前会话的认证模式,修改认证模式使用addauth命令:
addauth scheme auth #scheme是认证模式(貌似只能是digest),auth是认证信息,格式:user:password
例如:
addauth digest feng:123456 #添加auth模式,后面携带的参数是user:password模式
#如果要退出认证,只需要使用close关闭连接,再使用connect重新连接就好了
简单解释一下acl权限的auth模式(digest模式)设置过程,假如我们开启一个新的会话,我们有一个/mynode节点:
可以看到,/mynode节点默认模式是world:anyone:cdrwa,然后我们修改它的权限:
从上面可以看到,只有feng:123456这个用户可以读(r),还可以管理权限(a),其他认证都不能操作数据节点,
注意,当我们需要修改znode节点的acl时,需要确认我们当前会话已使用addauth命令添加了认证信息,否则会提示设置acl权限失败(所以上图第一行命令addauth就是添加认证信息)
接着,我们使用close命令关闭连接,使用connect命令重新连接,这时会话就变成了无认证状态,使用get获取/mynode节点数据时就会提示认证错误:
接着我们添加认证信息,然后再使用get命令就可能获取到数据了
总结:acl权限控制可以理解为,在创建znode节点时或者使用setAcl命令为已存在的znode添加Scheme模式(world,auth,digest,ip,super)和权限(crdwa),Scheme模式作为匹配条件,当客户端连接Zookeeper的会话满足Scheme模式的条件,就会具有此znode节点上设置的权限
其他命令操作
history #查看当前会话中使用过的命令,每个命令会携带一个编号
redo cmdno #重新执行命令,cmdno是命令编号,可以使用history查看
printwatches [on|off] #是否输出 watch 事件,如果使用on或者off则表示设置
sync path #会强制客户端所连接的服务器状态与leader的状态同步,这样在读取 path 的值就是最新的值了
quit #直接退出当前的zkCli命令行
close #关闭连接,但不会退出当前zkCli命令行
connect host:port #打开连接
Zookeeper基础教程(三):Zookeeper连接使用—zkCli的更多相关文章
- Zookeeper基础教程(六):.net core使用Zookeeper
Demo代码已提交到gitee,感兴趣的更有可以直接克隆使用,地址:https://gitee.com/shanfeng1000/dotnetcore-demo/tree/master/Zookeep ...
- Zookeeper基础教程(五):C#实现Zookeeper分布式锁
分布式锁 互联网初期,我们系统一般都是单点部署,也就是在一台服务器完成系统的部署,后期随着用户量的增加,服务器的压力也越来越大,响应速度越来越慢,甚至出现服务器崩溃的情况. 为解决服务器压力太大,响应 ...
- Zookeeper基础教程(四):C#连接使用Zookeeper
Zookeeper作为分布式的服务框架,虽然是java写的,但是强大的C#也可以连接使用. C#要连接使用Zookeeper,需要借助第三方插件,而现在主要有两个插件可供使用,分别是ZooKeeper ...
- zookeeper基础教程
一.关于zookeeper Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储, Zookeeper 作用 ...
- Zookeeper基础教程(二):Zookeeper安装
上一篇说了,一个Zookeeper集群一般认为至少需要3个节点,所以我们这里安装需要准备三台虚拟机: # 192.168.209.133 test1 # 192.168.209.134 test2 # ...
- Zookeeper基础教程(一):认识Zookeeper
引用百度百科的话 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服 ...
- GStreamer基础教程04 - 动态连接Pipeline
摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline:另一种是直接使用playbin,由playbin内部动态创 ...
- SpringCloud2.0 Eureka Client 服务注册 基础教程(三)
1.创建[服务提供者],即 Eureka Client 1.1.新建 Spring Boot 工程,工程名称:springcloud-eureka-client 1.2.工程 pom.xml 文件添加 ...
- git基础教程(三)
3.github与git同步 3.1 配置公私钥 3.2 github上建立个人仓库 3.3 本地仓库同步到github #将本地仓库与远端仓库建立连接 #用简写名代替后面的远端连接 git remo ...
随机推荐
- java代码定时备份mysql数据库及注意事项——基于 springboot
源码地址: https://gitee.com/kevin9401/BackUpDataBase git 拉取: https://gitee.com/kevin9401/BackUpDataBase. ...
- 【编程思想】【设计模式】【行为模式Behavioral】状态模式State
Python版 https://github.com/faif/python-patterns/blob/master/behavioral/state.py #!/usr/bin/env pytho ...
- 出现 CannotAcquireLockException 异常
项目出现 CannotAcquireLockException异常 原因: 百度了一下,是由于 Spring 事务嵌套造成死锁 结合自己的, handleWithdraw 方法底层有调用 其他 se ...
- 04 - Vue3 UI Framework - 文档页
官网的首页做完了,接下来开始做官网的文档页 返回阅读列表点击 这里 路由设计 先想想我们需要文档页通向哪些地方,这里直接给出我的设计: 所属 子标题 跳转路径 文件名(*.vue) 指南 介绍 /do ...
- 转:select、poll、epoll之间的区别总结[整理]
转:select.poll.epoll之间的区别总结[整理] select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就 ...
- 人工水母搜索算法--JS
1. 人工水母算法原理背景 水母生活在世界上不同深度和温度的水中.它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大.它们有各种各样的颜色.大小和形状.大多数水母偏好海洋环境.它们进食的方 ...
- MISC常见题型整理
题目打包在这里 提取码:fhkb MISC 流量包分析 流量包_1 流量包_2 流量包_3 图片隐写 图片隐写_1 图片隐写_2 图片隐写_3 图片隐写_4 图片隐写_5 图片隐写_6 音频隐写 音频 ...
- 删除其他列Table.SelectColumns(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- 解决android studio no debuggable process
这个问题可能是由多种因素造成的. 一.可能是buildtypes配置或选择错误,在对应module的build.gradle中确认如下配置 debug { debuggable true//一定要配置 ...
- CF1139A Even Substrings 题解
Content 有一个长度为 \(n\) 的数字串 \(s\),试求出代表偶数的子串个数. 数据范围:\(1\leqslant n\leqslant 65000\),\(s\) 仅包含数字 \(1\s ...