标签:zk zookeeper 监听 获取 节点 Leader 客户端
1.zk的主要作用:
1.zk+dubbo 注册数据的时候 生产者和消费者节点下url 为临时节点。 其余如配置文件等节点都是持久节点。 2.作为分布式锁中间件。 3.分布式job,主节点运行job2.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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。