初识ZooKeeper-ZooKeeper常用命令行操作

目录

ZooKeeper特性

Session的基本原理

启动命令行操作

ls命令 

ls2命令

stat命令

get命令

状态信息的含义

Create命令

set命令

delete命令

Watcher命令行

watcher机制

watcher简单使用

watcher父节点事件类型

watcher子节点事件类型

watcher使用场景

ACL(access control lists)权限控制

ACL命令行简单使用

ACL的构成

ACL命令行使用

1.word:anyone:cdrwa

2.auth:user:pwd:cdrwa、digest:user:BASE64(SHA1(pwd)):cdrwa、addauth digest user:pwd

3.ip:192.168.1.1:cdrwa

4.超级用户的设置

ACL使用场景

ZooKeeper四字命令 Four Letter Words

stat命令

ruok命令

dump命令

conf命令

cons命令

envi命令

mntr命令

wchs命令


 

ZooKeeper特性

Session的基本原理

1.客户端与服务端之间存在的连接也就是会话  session

2.每一个会话都可以设置一个超时时间

3.心跳结束,session则过期

4.session过期,则临时节点znode会被抛弃

5.心跳机制:客户端向服务端的ping包请求

启动命令行操作

通过./zkCli.sh打开ZooKeeper的客户端进入命令行平台

connected 表示已连接2181这个端口,表示已经进入到zookeeper自己的控制台

ls命令 

ls path [watch ] 指可以查看某一个路径下有哪些目录列表  watch是一个监督者

 

子目录相当于节点,zookeeper这里就是以节点来说,所以说 / 就是根节点,zookeeper就是父节点, quota就是子节点

ls2命令

ls2 path [watch ]

/ 就是根节点,zookeeper是根节点下的节点  下面一堆的数据就是它的状态信息

stat命令

它会将上边的状态信息全部抄出来

所以可以看出 ls2命令 相当于ls + stat命令

get命令

它会将当前的目录(节点),每个节点都会存储数据,它会将当前节点我们存储的数据取出来

因为现在为空,所以现在是没有任何的数据。下面的一堆数据也是状态信息。

状态信息的含义

cZxid = 0x0     代表zookeeper创建后为这个节点所分配的ID

ctime = Thu Jan 01 08:00:00 CST 1970     代表zookeepe这个节点r创建时间(createtime)

mZxid = 0x0  代表修改(modify)后 zookeepe分配的一个ID

mtime = Thu Jan 01 08:00:00 CST 1970   代表修改(modify)后的时间 如果该节点没有被修改 它的修改时间和创建时间是一样的

pZxid = 0x0  代表子节点的一个ID

cversion = -1 代表的是子节点的版本(version) 子节点发生变化子节点版本就会发生变化

dataVersion = 0  代表当前节点数据的一个版本号 如果当前节点数据修改版本号会自动累加1

aclVersion = 0  代表一个权限模型 acl代表权限 当节点权限发生变化的时候 权限的版本会自动累加1

ephemeralOwner = 0x0

dataLength = 0  代表的是数据 长度

numChildren = 1 代表的是它下面的子节点有几个

Create命令

create [-s] [-e] path data acl   

如果不写 -s -e则会进行默认的创建,是非顺序的也就是没有顺序的并且是持久化的。

当我们创建的时候在指令上加上 -e 我们会创建一个临时的节点

我们可以看到之前创建的子节点的版本号cversion变为1 

在tmp创建的子节点 ephemeralowner不是0X0了,而是一个字符了,代表的这个该节点是一个临时节点,运用这个属性值我们可以判断我们的节点是否为临时节点

我们按住ctrl +c 重新进入我们命令行控制台,进入我们的wj子节点会看到我们之前创建的tmp临时节点已经被删除掉了,根据心跳机制的时效性将其删除

当我们创建的时候在指令上加上 -s 我们会创建一个顺序节点

set命令

set path data [version]  设定某一目录,给某一个值  修改我们的节点操作

我们可以看到 cversion版本号由0变为1 了

如果在修改之前我们获取当前版本号为1 进行修改并且已修改成功,这时候另一个人还去进行对这个版本号为1的进行修改,会报错

delete命令

delete path [version] 删除某个节点 如果不加版本号则会删除这个节点 如果加上版本号节点则会只会去删除掉对应的版本号

我们可以看到不带有version直接将sec00**01那个子节点进行了删除操作

当我们的子节点版本变为1时,我们删除该子节点的版本还是0的话则会进行一个报错,提示我们删除对应的子节点

Watcher命令行

watcher机制

1.针对每一个节点的操作,都会有一个监督者 (watcher)相当于一个触发器

2.当监控的某个对象(znode)发生了变化,则触发watcher事件

3. zookeeper中的watcher是一次性的,触发后立即销毁,通过某些手段我们也可以将其设置为永久性的

4.父节点、子节点 增删改都能触发其watcher

5.针对不同类型的操作,触发的watcher事件也不同(节点创建事件、节点删除事件、节点数据变化事件)

watcher简单使用

1.通过get path [watch]  设置watcher

2.父节点 增删改 操作触发 watcher

3.子节点 增删改 操作触发watcher

watcher父节点事件类型

1.创建父节点触发:NodeCreated 

我们设置一个wjj的事件状态  当我们创建wjj时候可以看到触发了watcher事件 事件类型是NodeCreated path为我们所针对的一个路径目录

2.修改父节点数据触发:NodeDataChanged

当我们不去设置修改的触发事件时,我们修改后不会去触发,当我们设置完修改的触发事件时,我们看到了触发了watcher事件 事件类型为NodeDataChanged path为我们所针对的一个路径目录

3.删除父节点触发:NodeDeleted

我们可以看到设置完成后,当我们删除wjj节点时,watcher被触发 事件类型为NodeDeleted ,path为我们所针对的一个路径目录。

watcher子节点事件类型

1.ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged

我们创建父节点wjj 对父节点设置watcher事件  当我们在wjj下创建子节点时 触发watcher事件 事件类型为NodeChildrenChanged  path为父节点路径 creared为子节点路径

2.ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged

我们在父节点wjj 对父节点设置watcher事件  当我们在wjj下删除子节点a时 触发watcher事件 事件类型为NodeChildrenChanged  path为父节点路径 

3.ls为父节点设置watcher,修改子节点不触发事件

我们先对wjj创建watcher事件,新增子节点aa时触发新增子节点事件,再对wjj创建watcher事件,但是我们修改子节点时没有触发watcher事件,这是zookeeper的机制,我们需要将子节点当做父节点来设置才可以

当我们用get我们的子节点设置watcher事件时,修改子节点时才会触发 事件类型为NodeDataChanged

watcher使用场景

1.统一资源配置

如果三台服务器节点相同,我们只需要更新其中一台,根据watcher事件会对其余两台进行更新。

ACL(access control lists)权限控制

1.针对某一个节点可以设置相关读写等权限,目的是为了保障数据安全性

2.权限permissions可以指定不同的权限范围以及角色(对不同的角色创造出不同的组合)

ACL命令行简单使用

1.getAcl:获取某个节点的acl权限信息

2.setAcl:设置某个节点的acl权限信息

3.allauth:输入认证授权信息,注册时输入明文密码(登录)但是在zookeeper的系统里,密码是以加密的形式存在的

ACL的构成

1.zookeeper的acl通过[scheme:id:permissions]来构成权限列表

scheme:代表采用的某种权限机制 (四到五种权限机制 一般常用的为四种)

     (1)word:word下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]

              也就是我们常说的默认的权限

      (2)auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]

      (3)digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]

          简单的来说,auth与digest的区别就是,前者明文,后者密文 setAcl /path auth:lee:lee:cdrwa 与setAcl /path digest:lee:BASE64(SHA1(lee)):cdrwa是等价的,再通过addauth digest lee:lee后都能操作指定节点的权限

      (4)ip:当设置为ip指定的ip的地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions] 因为我们是进行分布式的部署,所以可以对某些IP设定访问某个节点

       (5)super:代表超级管理员,拥有所有的权限 它的修改需要我们修改一下文档配置       

id:代表允许访问的用户

permissions;权限组合字符串

       权限字符串缩写:crdwa

                                   create:创建子节点

                                   read:获取当前节点/当前节点下子节点

                                   write:设置当前节点数据

                                   delete:删除子节点

                                   admin:设置权限 


ACL命令行使用

1.word:anyone:cdrwa

我们可以看到我们在wjj节点下创建的abc子节点拥有的是默认的权限

我们将我们的wjj下abc的子节点设置一个不能删除的权限 crwa 没有d

再abc下创建子节点ab 当我们删除ab这个子节点时,会告诉我们没有权限无法进行删除

我们这时候重新将abc节点权限设置为rda,这时候我们删除abc下子节点ab就不会报错,可以删除

当我们将权限只设置为a的时候,我们去读取它发现也没有读取的权限了,而且也没有更改数据的权限

2.auth:user:pwd:cdrwa、digest:user:BASE64(SHA1(pwd)):cdrwa、addauth digest user:pwd

我们先创建一个test子节点  在test下创建abc子节点 ,我们可以看到abc子节点下是默认的权限,这时候我们对abc节点设置权限,提示我们需要进行注册才可以使用

我们先对wj进行注册后,继续上面的命令行,可以看到权限设置成功

我们查看一下,发现是成功的,密码被加密了

我们可以继续使用功能,因为我们权限是都开放的是都可以使用的,我们这时候用aaa来进行重新设置权限,然后查看权限 发现还是我们之前设置的wj  是因为不管后续我们输入的什么都是根据第一个设置的

创建一个a节点,在创建a的子节点b,权限是默认的权限

digest与auth的区别一个密文,一个是明文,但是保存的时候都是密文的。查看权限已经设置成功了

这时候我们查看是不可以的,因为我们还没有进行登录

我们进行登录的时候都是按照明文的方式进行登录,然后可以成功的查看子节点信息

因为权限设置的时候没有设置修改的权限,所以不能修改,但是删除该节点是可以操作的,并且成功删除掉

3.ip:192.168.1.1:cdrwa

在a节点下创建子节点ip 权限为默认权限

更改权限 ,可以看到权限已经更改为我们设置的ip地址

因为我们还没有设置客户端,所以现在无权限来进行访问

4.超级用户的设置

1.修改 zkServer.sh增加super管理员

 加入 "-Dzookeeper.DigestAuthenticationProvider.superDigest=wj:64ibjjwm94195LPhuzhUdkIjOl0=" \       

2.重启zkServer.sh

配置文件修改完成后,我们重启zkServer

我们看我之前设置的子节点ip还是无法访问,当我们登陆超级管理员帐号后,我们就可以查看ip子节点了

ACL使用场景

1.开发/测试环境分离,开发者无权操作测试库的节点,只能看

2.生产环境上控制指定ip的服务可以访问相关节点,防止混乱

ZooKeeper四字命令 Four Letter Words

1.ZooKeeper可以通过自身提供的简写命令来和服务器进行交互

2.需要使用到nc命令,安装: yum install nc

3.echo [commond] | nc [ip] [port]  commond代表命令 ip及port代表ZooKeeper的ip及port

stat命令

查看zk的状态信息,以及是否mode (集群还是单例)

mode 中standalone 属于单机运行

ruok命令

查看当前zkServer是否启动,返回imok  可以理解为are you ok?

说明是启用的

dump命令

列出未经处理的会话和临时节点

我们可以看到当前会话和临时节点都是0  因为我们没有连接客户端

conf命令

查看服务器配置

cons命令

展示连接到服务器的客户端信息

envi命令

查看zk的环境变量

mntr命令

监控zk健康信息

wchs命令

展示watch的信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_36014509/article/details/81538132