zookeeper基本特性及linux客户端操作

1. session的基本原理

  • 客户端与服务端之间的连接存在会话
  • 每个会话都会可以设置一个超时时间
  • 心跳结束,session过期

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

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

2. zk常用命令行操作

  • 通过./zkCli.sh打开zk的客户端进行命令行后台
cd /usr/local/zookeeper/bin //导航到zk的bin目录

./zkCli.sh  //启动zk客户端
  • ls与ls2命令
    ls命令查询当前节点下的子节点
    ls2命令是查询当前节点的所有信息,是ls+stat命令的组合效果
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] ls /zookeeper
[quota]
[zk: localhost:2181(CONNECTED) 2] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 3]
  • get与stat命令
    stat命令查询当前节点信息
[zk: localhost:2181(CONNECTED) 3] stat /
cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

get命令

[zk: localhost:2181(CONNECTED) 4] get / 

cZxid = 0x0
ctime = Wed Dec 31 16:00:00 PST 1969
mZxid = 0x0
mtime = Wed Dec 31 16:00:00 PST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
  • create [-s] [-e] path data acl 创建节点

  • set path data [vsersion] 更新节点数据

  • delete path [version] 删除节点

3. zk特性-watcher机制

  • 针对每个节点的操作,都会有一个监督者-> wathcer
  • 当监控的某个对象(znode)发生了变化,则触发watcher事件
  • zk中的watcher是一次性的,触发后立即销毁
  • 父节点,子节点 增删改都能够触发其watcher
  • 针对不同类型的操作,触发的watcher事件也不同。(子)节点创建事件,(子)节点删除事件,(子)节点数据变化事件

3.1 Watcher命令行学习

  • 通过get path [watch]设置watcher
  • 父节点增删改操作触发watcher
  • 子节点增删改操作触发watcher

3.2 Watcher事件类型

  1. 创建父节点触发:NodeCreated
  2. 修改父节点数据触发:NodeDataChanged
  3. 删除父节点触发:NodeDeleted
  4. ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged
  5. ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
  6. ls为父节点设置watcher,修改子节点不触发事件

3.3 watcher使用场景

  • 统一资源配置
    这里写图片描述

4. ACL(access control lists)权限控制

  • 针对节点可以设置相关读写等权限,目的为了保障数据安全性
  • 权限permissions可以指定不同的权限范围以及角色

4.1 ACL命令行

  • getAcl:获取某个节点的ACL权限信息
  • setAcl:置某个节点的ACL权限信息
  • addauth:输入认证授权信息,注册时输入明文密码(登录)但是在zk的系统里,密码是以加密的形式存在的

4.2 ACL的构成

  • zk的acl通过[scheme:id:permissions]来构成权限列表
scheme:代表采用的某种权限机制

id:代表允许访问的用户

permissions:权限组合字符串

4.2.1 scheme

  • world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone:[permissions]
  • auth:代表认证登录,需要注册用户有权限就可以,形式为auth:user:password:[permissions]
  • digest:需要对密码加密才能访问,组合形式为digest:username:BASE64(SHA1(password)):[permissions]
  • 简而言之,auth与digest的区别就是,前者明文,后者密文setAcl /path auth:lee:lee:cdrwa 与setAcl /path digest:lee:BASE64(SHA1(password))cdrwa是等价的,在通过addauth digest lee:lee后都能操作指定节点的权限
  • ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
  • super:代表超级管理员,拥有所有