版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:[https://blog.csdn.net/weixin\_38004638/article/details/97148292](https://blog.csdn.net/weixin_38004638/article/details/97148292) zookeeper是一个为分布式应用提供一致性服务的软件,它内部是一个分层的文件系统目录树结构,规定统一个目录下只能有一个唯一文件名
数据模型
根据zookeeper的这些特性来实现分布式锁
这里推荐一个apache的开源库Curator,它是一个ZooKeeper客户端,Curator提供的InterProcessMutex是分布式锁的实现,acquire方法用于获取锁,release方法用于释放锁。
优点:具备高可用、可重入、阻塞锁特性,可解决失效死锁问题。
缺点:因为需要频繁的创建和删除节点,性能上不如Redis方式。
https://www.cnblogs.com/shileibrave/p/9854921.html
【七张图】彻底讲清楚ZooKeeper分布式锁的实现原理
http://www.imooc.com/article/284956?block_id=tuijian_wz
分布式锁_慕课手记
http://www.imooc.com/article/details/id/256334
https://blog.csdn.net/weixin_38004638/article/details/97292019
实现多线程轮流获取锁,单线程重复获取锁成功

对比获取锁过程,将生成节点路径缩短

客户端断开后重连,已经可以正常获取锁
锁信息如下,分别是获取分布式锁生成节点,以及获取分布式id中workid生成节点

获取分布式锁生成节点,以及获取分布式id中workid生成节点

客户端断开后重连,原生成的workid节点已经删除,但路径还在

再次获取分布式锁生成节点,此时跟锁节点在同一路径下还存在id节点的路径

在判断自己是否是最小顺序节点的时候,就


addauth digest super:admin 获取超级管理员权限
查看新生成的id路径

查看新生成的临时节点

过期的旧节点将会被删除

查看zookeeper版本 echo stat|nc localhost 2181,下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
查看maven引入的jar包版本,下载地址:https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper
测试可以临时节点和递增节点,可以正常删除
先断开连接,节点可能等待超时释放。先关闭zookeeper服务,保证删除。
参考:
采用zookeeper的EPHEMERAL节点机制实现服务集群的陷阱
https://blog.csdn.net/SAN_YUN/article/details/84925365
使用zookeeper封装组件curator的锁,发现zookeeper大量临时节点没有被删除 ,只删除了子节点,低版本将临时节点存储为了持久化节点
https://www.cnblogs.com/xiaodu1993/articles/xiaodu1993.html
zookeeper分布式锁超时没有自动释放,zk集群服务器时间不一致
https://blog.csdn.net/qqxhwwqwq/article/details/52042261
zookeeper 临时节点不消失的原因 ,客户端与服务器的时间相差比较大,清空data目录后,重新初始化zk目录结构
https://blog.csdn.net/gong_xucheng/article/details/44337265
dubbo提供者停止服务后zookeeper临时节点不能自动摘除,服务器时间不正确,临时节点时间戳不正确