标签:zk zookeeper 监听 获取 节点 Leader 客户端
1.zk的主要作用:
1.zk+dubbo 注册数据的时候 生产者和消费者节点下url 为临时节点。 其余如配置文件等节点都是持久节点。
2.作为分布式锁中间件。
3.分布式job,主节点运行job
2.zk 节点:
1.持久化节点
一旦创建,永久存在,哪怕客户端跟zk断开,除非手动删除
2.持久化顺序编号节点
一旦创建,永久存在,哪怕客户端跟zk断开,除非手动删除,只是存在顺序编号
3.临时节点
创建后,客户端跟zk断开,节点被删除。
4.临时顺序节点
创建后,客户端跟zk断开,节点被删除,只是zk给该节点名称进行了顺序编号。
5.Container 节点 容器节点
3.5.3版本新增,如果Contailner节点下面没有子节点,则contailner节点在未来会被zk自动清除,定时任务默认60s,检查一次
6.TTL节点
默认禁用,只有通过 配置开启不稳定。 过了指定时间会被删除。
监听节点都是一次性监听,监听到节点后,该节点发生便会不会再被监听到。
3.zk 分布式锁:
zk锁 访问比自己小znod节点,是否存在锁,存在则等待,不存在则获取锁。
zk一般是公平锁,因为如果是非公平锁,所有节点都监听最小节点,最小节点如果释放,会造成羊群效应。
2.1 非公平状态
1.获取锁
2.判断当前锁是否被其他事务已经获取
2.1已被获取,监听等待
2.2未被获取,创建节点
3.是否创建成功
3.1 未成功,监听等待
3.2 成功,获取锁
4.获取到锁,处理完成业务,释放锁。--删除节点 并通知监听,可以前去获取锁。
缺点:会出现羊群效应,在高并发场景,当锁释放,即节点删除时,所有连接都监听到,此时再次并发竞争。
2.2 公平锁:
1.请求进来,直接在/lock节点下创建一个临时顺序节点。
2.判断自己是不是lock节点的最小节点
2.1 是最小节点,获取锁
2.2不是最小节点,对当前节点进项监听 watch
3.获取锁的请求,处理完释放锁,即删除delete节点,然后后继下一个节点,重复2操作
4.消息广播
client 端 发送请求:例如一个写命令
1.Leader接受后,封装成一个事务Proposal,发送给所有的Follwer,
1.1 Leader 写本地数据文件
1.2 Leader 给自己发送ack
2.Follower接受到leader的事务Proposal
2.1 写本地数据文件
2.2 返回ack
3.Leader接受到半数以上的ack发送commit命令
3.1 默认写成功
3.2 发送 inform让 observer存储消息
3.3 自己commit到内存数据
3.4 挥发节点数据变动通知给客户端,触发客户端监听事件
3.5 返回客户端,命令操作结果
4.Follower 接受到commit,commit写自己的内存数据
5.崩溃恢复
1.ZAB协议去报丢弃那些只有Leader提出/复制,但没有提交的事务。
2.ZAB协议确保那些已经在Leader提交的事务最终会被所有服务器提交。
6.zk选举leader
初始选举:选举格式vote =(myid,ZXID) myid ====zk的服务器id zxid事务id 初始选举的时候值为0 第一次选举的时候,自己投自己一票。
此时服务器,每人都是自己一票,然后比较自己投出的票,以及收到票,判断谁应该为leader,默认myid大的应该为leader。
此时选举出leader。
标签:zk,
zookeeper,
监听,
获取,
节点,
Leader,
客户端
From: https://www.cnblogs.com/dhdnm/p/16607486.html