关于Zookeeper 的简单入门说明
Zookeeper版本3.5.6
前言:这篇博客讲的是纯理论和一些简单入门的概念和说明。如果对Zookeeper已经有过了解的可以不用看这篇废话的的博文了
用最简单的说法来描述Zookeeper的话:文件系统(类似)+监控(对于文件系统的增删改查的监控通知)
Zookeeper 概念
Java 编写的高性能分布式协调中间件(主要的功能,开发出来就是为了这么用的,当然也没说不能用于其他的方式,看具体的需求),协调各个服务进程的访问控制问题(类似多线程的同步之类的)。注意注册中心只是Zookeeper本身的特性可以实现的场景需求(注册中心:保留服务和相关访问地址列表)
安装
docker安装Zookeeper 1. 官网下载Zookeeper 解压至特定目录
2. 配置:${zookeeper_home}/conf 下有个配置样例zoo_sample.cfg 改成zoo.cfg(配置里面都有说明)
3. 启动 ${zookeeper_home}/bin/zkServer.sh start (提供服务端口默认2181)
4. 客户端连接 zkCli.sh -server ip:port (-server 如果本地可以不要)
数据结构
基本的数据模型
/
|------/key1
| |------/key1_1
| |------/key1_2
|------/key2
|------/key2_1
|------/key2_2
- 树种每个节点叫Znode(支持读写),维护了一个stat 状态信息(数据变化和版本等信息),每个Znode 可以设置一个value值。value 值不应该太大(会带来较大的网络开销),不用将其当成数据库使用
- 节点的创建必须按层级创建 比如创建/key1/key1_1 那么/key1 必须存在
节点的类型
- 持久化节点:节点数据永久保存到磁盘
- 临时节点:生命周期和创建该节点的客户端生命周期一致,客户端会话结束,其创建的节点自动删除
- 有序节点:创建的节点后面添加一个递增的序列,该序列在同一父节点下是惟一的,另外持久化节点
和临时节点是可以有序的 - 版本3.5.3之后添加了容器节点:容器节点下的最后一个子节点被删除,该容器节点就会自动删除
- 版本3.5.3之后添加了TTL 节点:可以设置节点的存活时间,存活时间内没有修改并且没有任何子节
点,则自动删除
Watcher机制
提供针对Znode的订阅/通知机制,Znode节点状态发生变化或者Zookeeper客户端连接状态发生变化,触发事件通知(服务发现 /注册依赖此实现),注意Watcher的事件都是一次性的,触发之后还需监听需要重新注册监听