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