ZK

274 阅读2分钟

ZK

分布式协调工作是通过某种方式,让每个节点的信息能够同步和共享,这依赖于服务进程之间的通信,通信方式有两种: 1.通过网络进行信息能够信息共享, 2. 通过共享存储。zk使用的共享存储

基本概念

集群角色

Leader Follower Observer

会话

客户端和服务端之间的一个TCP长连接, 对外的服务端口默认2181。

数据节点

一类是机器节点, 一类是数据节点-Znode

版本

Stat记录了三个版本 version, cversion, aversion

Watcher

时间监听器

ACL

Scheme:ID:Perm

Scheme: world, digest, ip, super

Perm: CRWDA, CD是针对子节点的

搭建环境

单机

tar -zxvf zookeeper-3.4.14.tar.gz
cd zookeeper-3.4.14
mkdir data
cd conf
mv zoo_sample.cfg zoo.cfg

vim zoo.cfg
dataDir=/...

cd ../bin
./zkServer.sh start

集群

clientPort=2081
dataDir=/zkcluster/zk01/data
dataLogDir=/zkcluster/zk01/data/logs

类似的配置三次后,配置集群

  • 在每个zk的data下建立一个myid文件,内容1,2,3

  • 在zk的zoo.cfg中配置Port和集群服务器IP列表

    server.1=localhost:2881:3881
    server.2=localhost:2882:3882
    server.3=localhost:2883:3883
    

系统模型

Znode

类型

持久性(Persistent) 临时性(Ephemeral) 顺序节点(Sequential)

事务ID

zk中, 事务指改变ZK服务器状态的操作, 对于每一个事务请求,ZK会为其分配一个全局唯一的事务ID, ZXID, 64位数字, 每个ZXID对应一次更新操作。

状态

cZxid 节点被创建的事务ID

ctime 节点创建时间

mZxid 节点最后一次被修改的事务ID

mtime 节点最后一次被修改的时间

pzxid 节点子列表最后一次被修改的事务,子节点列表变更更新, 内容变更不修改

cversion 子节点版本号

dataVersion 内容版本号

aclVersion acl版本

ephemeralOwner创建临时节点的SessionID , 持久节点0

dataLength 数据长度

numberChildren 直系子节点数

Watcher

一对多的订阅关系.主要包括客户端线程, 客户端WatcherManager, zk服务器,具体工作流程: 当客户端向zk服务器注册时,会将Watcher对象存储在客户端的WatcherManager中, 当zk服务器触发Watcher事件后, 会向客户端发送通知, 客户端线程从WatcherManager中取出对应的Watcher对象执行回调

ACL

权限模式(Scheme)

IP , Digest, World, auth

授权对象(ID)

权限(Perm)

CRWDA