ZooKeeper学习笔记(干货)
ZooKeeper工作机制
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出的反应。

Zookeeper特点

1、有一个领导者(leader),多个追随者(follower)
2、集群中有半数以上的节点存活,zookeeper就可以正常服务(zookeeper适合安装奇数台服务器,最少安装三台)
3、更新请求顺序执行:来自同一个client的更新请求按照其发送顺序依次执行
4、数据更新原子性:一次数据更新要么成功,要么失败
5、实时性:在一定时间内,client能读到最新数据
数据结构
Zookeeper数据模型的结构与Unix文件系统类似,整体上可以看做是一棵树,每个节点称作一个ZNode。每个ZNode默认能够存储1MB的数据,每个ZNode都可以通过唯一路径作为标识。

Zookeeper选举机制
第一次启动
根据投票规则去选举
每个服务器启动时都会将票投给自己,然后去判断选票是否有服务器个数的半数以上,若没有,则进入Looking状态。然后交换选票,将自己的选票交给sid比自己大的服务器;当选票达到半数以上,该服务器当选为leader,其他服务器由looking状态变为follower状态,当服务器变为follower状态后,不会更改选票信息,此时后面的服务器少数服从多数,将选票交给leader,并将自身状态变为follower。
非第一次启动
参数:sid:服务器id,相当于myid,用来唯一标识
zxid:事物id,用来标识一次服务器状态的变更。
Epoch:每个leader任期的代号
1、集群本来存在一个leader:
服务器试图选举,会被告知有leader信息,对于此机器来说,直接与leader机器建立连接,并同步状态。
2、集群中确实不存在leader:
①EPoch大的直接胜出
②Epoch相同,事物id大的胜出
③事物id也相同,服务器id大的胜出
Zookeeper中的Shell命令
| 命令行基本语法 | 功能描述 |
|---|---|
| stat | 查看节点状态(stat /path) |
| set | 设置节点的具体值(set /path "具体值") |
| help | 显示所有操作命令 |
| delete | 删除节点(delete /path) |
| create |
普通创建(create /path "value") -s 含有序列 (create -s /path "value") -e 临时(重启或者超时消失)(create -e /path "value") |
| ls path |
使用 ls 命令来查看当前 znode 的子节点 [可监听] -w 监听子节点变化 (ls /path -w) -s 附加次级信息 |
监听器原理
1)首先要有一个main()线程
2)在main线程中创建Zookeeper客户端,这时就会创建两个线 程,一个负责网络连接通信(connet),一个负责监听(listener)。
3)通过connect线程将注册的监听事件发送给Zookeeper。
4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中。
5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程。
6)listener线程内部调用了process()方法。
客户端向服务端写流程
ZooKeeper由一个leader和多个follower构成,Leader可以做读和写操作,而Follower只能进行读操作。
直接发送个Leader节点

直接发送给Follower节点



浙公网安备 33010602011771号