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节点

 

 

 

posted @ 2022-04-22 08:16  码..农007  阅读(140)  评论(0)    收藏  举报