etcd踩坑记录

etcd踩坑记录

问题:获取etcd锁时一直阻塞

etcd踩坑记录

运行结果:

etcd踩坑记录

原因:

​ 出现这种问题的原因和etcd的分布式锁的实现原理有关,简单来说:etcd的锁实现原理就是

所有的客户端都在pfx(这里就是/pfx/v1)下创建一个自己的key,createrevision最小的那个客户端获得锁,也就是最早建立key的客户端获得锁,之后按照创建的时间先后依次获得锁。

​ 由于我们最开始在pfx下建立的一个key,所以它的创建时间回比我们创建的所有关于锁的key的创建时间要早,导致我们永远获取不到锁。

​ 详细信息可以参考 cadem 这位博主的一篇文章 用Etcd实现分布式锁和选主

解决办法:

​ 谨慎选择锁的pfx的值,确定除了锁之外不会在此之下创建或修改其他key