其他分享
首页 > 其他分享> > zookeeper:

zookeeper:

作者:互联网

 

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,客户端
来源: https://www.cnblogs.com/dhdnm/p/16607486.html