目录

  1. 基本数据模型
  2. 数据模型的基本操作
    1. 客户端连接
    2. 查看znode结构
    3. 关闭客户端连接
  3. zk的作用体用
  4. zk常用命令行操作
  5. zk特性
    1. Session的基本原理
    2. Watcher机制
    3. Watcher命令行学习
      1. watcher事件类型
      2. watcher使用场景
    4. ACL(ACCESS CONTROL LISTS)权限控制
    5. ACL命令行
    6. ACL的构成
      1. Scheme
      2. Permissions
    7. ALC的常用使用场景
  6. zk四字命令Four Letter Words
    1. 四字命令简介
  7. zk集群搭建

基本数据模型

  1. 是一个树形结构,类似前端开发中的tree.js组件,zk的数据模型也可以理解为linux的文件目录:/usr/local/…
  2. 每一个节点都称之为znode,它可以有子节点,也可以有数据
  3. 每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
  4. 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
  5. 每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)
  6. 删除、修改过时节点,版本号不匹配则会报错
  7. 每个zk节点存储的数据不宜过大,几K即可
  8. 节点可以设置权限acl,可以通过权限来限制用户的访问

数据模型的基本操作

客户端连接

1
2
3
./zkServer.sh start
./zkCli.sh
#通过help查看命令

查看znode结构

1
2
ls
# 返回 /zookeeper

关闭客户端连接

关闭客户端一般直接Ctrl+C即可。

zk的作用体用

  1. master节点选举,主节点挂了以后,从节点就会接受工作,并且保证这个节点是唯一的,这也是所谓首脑模式,从而保证我们的集群是高可用的。
  2. 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多。
  3. 发布与订阅,类似消息队列MQ(amq,rmq…),dubbo发布者把数据存在znode上,订阅者会读取这个数据。
  4. 提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁。
  5. 集群管理,集群中保证数据的强一致性。

zk常用命令行操作

  1. 通过./zkCli.sh打开zk的客户端进行命令行后台。
  2. ls与ls2:ls是查看节点的信息,而ls2则是ls+stat命令的整合命令。
  3. get与stat:get是获取节点的数据,并且会打印出节点的信息,stat则是直接打印节点信息,我们来看下节点信息中包含了什么
1
2
3
4
5
6
7
8
9
10
11
cZxid    # 节点创建后,zk为这个节点分配的id
ctime # 创建时间
mZxid # 节点修改后的id,前缀的m代表modify
mtime # 节点修改时间
pZxid # 子节点id
cversion # 子节点的version
dataVersion # 数据版本号,数据修改后,版本号会加1
aclVersion # 权限版本号
ephemeralOwner # 显示当前节点是临时节点还是永久节点,0x0是永久节点,0x1...是临时节点
dataLength # 数据长度
numChildren # 子节点的数量
  1. create:语法create [-s] [-e] path data acl;-e为临时节点,-s为顺序节点
  2. set:语法set path data [version];version主要用于乐观锁
  3. delete:语法delete path [version];version语义与set一致

zk特性

Session的基本原理

  1. 客户端与服务端之间的连接存在会话
  2. 每个会话都可以设置一个超时时间
  3. 心跳结束,session则过期
  4. Session过期,则临时节点znode会被抛弃
  5. 心跳机制:客户端向服务端的ping包请求

Watcher机制

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

Watcher命令行学习

  1. 通过get path [watch]设置watcher
  2. 父节点增删改操作都可以触发watcher
  3. 子节点增删改操作也都可以触发watcher

watcher事件类型

父节点

  1. 创建父节点触发:NodeCreated,可以通过stat path [watch]来给指定path绑定事件,path不存在也可以提前创建事件。
  2. 修改父节点数据触发:NodeDataChanged,也可以利用get path [watch]来绑定事件。
  3. 删除父节点触发:NodeDeleted。
  4. ls为父节点设置watcher,创建子节点触发:NodeChildrenChanged
  5. ls为父节点设置watcher,删除子节点触发:NodeChildrenChanged
  6. ls为父节点设置watcher,修改子节点不触发事件,需要把子节点当成父节点来进行事件绑定

watcher使用场景

  1. 统一资源配置

ACL(ACCESS CONTROL LISTS)权限控制

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

ACL命令行

  1. getAcl:获取某个节点的acl权限信息,语法 getAcl path
  2. setAcl:设置某个节点的acl权限信息,语法 setAcl path acl
  3. addauth:输入认证授权信息,注册时输入明文密码(登录),但是在zk的系统里,密码是以加密的形式存在的。语法:addauth scheme auth

ACL的构成

  1. zk的acl通过[scheme:ip:permissions]来构成权限列表
  • scheme:代表采用的某种权限机制
  • ip:代表允许访问的用户ip
  • permissions:权限组合字符

Scheme

  1. world:world下只有一个id,即只要一个用户,也就是anyone,那么组合的写法就是world:anayone:[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(
password))cdrwa是等价的,在通过addauth digest lee:lee后都能操作指定节点的权限

  1. ip:当设置为ip指定的ip地址,此时限制ip进行访问,比如ip:192.168.1.1:[permissions]
  2. super:代表超级管理员,拥有所有的权限

使用super是要进行两步
1.修改zkServer.sh增加super管理员,在文件中搜索nohup,增加如下代码
-Dzookeeper.DigestAuthenticationProvider.superDigest=username:password
2.重启zkServer.sh

Permissions

权限字符串缩写:crdwa

  1. create:创建子节点
  2. read:获取节点、子节点
  3. write:设置节点数据
  4. delete:删除子节点
  5. admin:设置权限

ALC的常用使用场景

  1. 开发/测试环境分离,开发者无权限操作测试库的节点,只能看
  2. 生产环境上控制指定ip的服务可以访问相关节点,防止混乱

zk四字命令Four Letter Words

  1. zk可以通过它自身提供的简写命令来和服务器进行交互
  2. 需要使用到nc命令,安装:yum install nc
  3. echo [command] | nc [ip] [port]

参考官网链接

四字命令简介

  1. stat 查看zk的状态信息,以及是否standalone mode
  2. ruok 查看当前zkserver是否启动,返回imok。
  3. dump 列出未经处理的会话和临时节点
  4. conf 查看服务器配置
  5. cons 展示连接到服务器的客户端信息
  6. envi 环境变量
  7. mntr 监控zk健康信息
  8. wchs 展示watch的信息
  9. wchc与wchp: session与watch及path与watch信息,注意3.4.10版本以上默认是不开启这两个命令,需要从zoo.conf文件中添加
    4lw.commands.whitelist

zk集群搭建

  1. zk集群,主从节点,心跳机制(选举模式)