文章目录
入门
分布式的为分布式应用提供协调服务的 Apache 项目
zookeeper 是基于观察者模式设计的分布式服务管理框架.
负责存储和管理大家都关心的数据.然后接受观察者的注册
一旦数据发生变化,将会通知注册在 zk 上的观察者
做出反应
特点
- zk集群只有一个 leader和多个Follower.
- 集群只要板书以上集群存活,zk集群就能正常服务
- 每个Server保存一份相同的数据副本.CLient获得的数据一致
- 更新请求顺序执行.
4.1 每个Client发送的zk集群的请求在zk内是顺序执行的
4.2 之后 其中的一个 zk 会将数据发送给其他 zk 一份. - 数据原子性,要么成功,要么失败
- 实时性,在一定时间内,Client能读到最新的数据
配置文件
指定了 每个 zk 节点之间通信的时间. 数据目录以及开放端口号
tickTime: 节点之间的通信时间. 2s
initLimit: zk 选举初始化的时间. 10个 tickTime == 10 * 20000
syncLimit: 发送请求和获取响应之间的 tick 数据 == 5 * 2000
... ...
选举
半数机制.适合奇数节点个数
超过半数以上升为 Leader
ZNode
每个 ZNode 能够存储 1M 的数据
每个节点不重名. 有一个唯一的路径标识
zk 的 ZNode 没有 目录和文件夹的区别
Linux 的 目录不可以存储数据.只有子节点可以存储数据
zk 的每一个 ZNode 都可以存储数据
持久Persistent
每个client创建的节点在client和server 断开连接后节点不删除
编号
在创建的时候可以通过参数指定,zk 就会自动给该节点名称进行顺序编号
这个顺序号在分布式系统中可以对所有发生的事件进行排序.
client 可以通过顺序号推断事件的顺序
短暂Ephemeral
每个client创建的节点在client和server 断开连接后节点删除
zoo.cfg
zk 的配置文件
可以配置 端口号,数据目录,每次心跳的时间以及初始化的时候
以及配置集群.这里的server.2,server.3,server.4 是 其他 zk 的服务名称.不能重复
总结
zk 有bin和conf目录.
bin目录启动命令. zkEnv.sh 配置 log 日志目录
conf 配置了 zkData目录,... ...
xsync
将文件文法到其他的虚拟机
xsync DIR
zkCli
使用 zkCli.sh ,链接 zk
就可以使用命令进行 CRUD 了
常用命令
CRUD
create
create /aaa 666
需要指定该节点的数据.否则不会创建
create -s /create 666
创建相同的节点会自动带上序号
create -e /aa aavalue
在 zk 重启或关闭后节点消失
watch
get /aa watch
set /aa 12345
在 zk每一个节点中 中 有一个 观察者列表. 每次 watch 的时候将watch 对象添加进入 列表. 在数据变更的时候 进行通知并删除观察者对象
ls watch 和 get watch 监控不同数据的变化
ZK内部原理
ZNode 类型
临时 永久 有序 无序
Stat结构体
每次 get /nodeName 节点的时候会携带的信息
cZxid
在 zk 中的写入是按顺序执行的.在每次操作都编了一个序号