- 1.功能
- 2.特点
- 3.结构数据
- 4.简单使用
- 5.选举机制
- 6.监听器原理
- 7.client像zookeeper写数据流程
一 功能
1:文件系统,存储数据
2:通知,当数据发生变化,zookeeper集群会通知订阅的单位
二 特点
1:角色:leader和follower
2:leader进行投票,更新系统状态
3:follower接收客户端的请求,干活的打工仔
4:leader和follower的角色不是固定的,
5:半数以上机器存活才能正常运行,因此一般设置集群数量为奇数
6:全局数据一致,每个server保存的数据一致
7:更新请求顺序执行,来自同一个client的更新请求顺序执行
8:数据更新原子性:一次数据更新要么成功,要么失败
三 数据结构
每一个节点都叫做znode,数据存储在节点上,每个节点都能存储数据
节点分类:
短暂(ephemeral):客户端断开连接后创建的节点删除
持久(persistent):客户端断开连接后创建的节点保留
有编号:zookeeper给节点进行顺序
无编号:没有进行编号
两两组合:短暂有序,短暂无序,持久有序,持久无序
四 简单使用
启动
bin/zkServer.sh start
启动后使用jps命令能查看到QuorumPeerMain在运行,但这不代表集群启动,需要启动半数以上的设置的server
检查集群启动
bin/zkServer.sh status
启动出错查日志文件,名称zookeeper.out
存在位置启动地点文件夹
(如果bin/zkServver.sh start启动就存在和bin的父级中也就是和bin同级,./zkServver.sh start启动就存在于bin里面)
登录集群
bin/zkCli.sh
查看节点(登录后功能)
ls /
ls /znode
ls /znode/node
创建节点(登陆后功能)
默认节点为永久无序
create /znode 节点数据 -----创建普通节点
create -s /znode 节点数据 -----创建有序节点
create -e /znode 节点数据 -----创建临时节点
create -e -s /znode 节点数据 -----创建临时有序节点
-----不能多级创建
查看节点存储数据(登陆后功能)
get /node
更改节点存储数据(登陆后功能)
set /node 新的数据
查看节点状态数据(登陆后功能)
stat /znode
通过里面的ephemeralOwer参数查看节点是不是永久,永久节点值为0
创建监听器,监听节点数目(登陆后功能)
ls /znode watch //监听器是一次性的,需要重复注册
创建监听器,监听节点数据(登陆后功能)
get /znode watch //监听器是一次性的,需要重复注册
删除节点(登陆后功能)
rmr /znode //递归删除节点,即使节点里含有其它节点
五 选举机制
server启动半数以上集群才会正常启动,这时候才有leader和worker
leader和worker选举机制:
1号启动,得票1,没有半数以上的票,进入观望状态
2号启动,得票1,2,编号小的选举编号大的,没有配置server的半数以上,进入观望状态
3号启动,得票1,2,3 半数以上,成为leader,zookeeper启动,1,2成为worker
4,5号启动,已有leader,成为worker
leader和worker不是固定的,当leader挂了,检测zookeeper集群,存在半数以上则选举编号大的成为新的leader
六 监听器原理
主线程创建zkClient,通过zkCLient自己的connect打开和zookeeper的连接,连接后告诉集群需要监听的地址,当监听地址内容发生改变就会告诉zkClient的Listener,然后调用我们自己定义内容的process方法
七 client向zookeeper写数据的流程
客户端发送请求给集群的某一个server
server不是leader就将信息转发给leader
leader发送信息给所有server进行投票决定做还是不做
server将各自投票结果给leader
leader通过投票结果进行决策,将决定告诉给每一个server有没有帮客户端写数据
server通知客户端