etcd踩坑記錄
問題:獲取etcd鎖時一直阻塞
運行結果:
原因:
出現這種問題的原因和etcd的分佈式鎖的實現原理有關,簡單來說:etcd的鎖實現原理就是
所有的客戶端都在pfx(這裏就是/pfx/v1)下創建一個自己的key,createrevision最小的那個客戶端獲得鎖,也就是最早建立key的客戶端獲得鎖,之後按照創建的時間先後依次獲得鎖。
由於我們最開始在pfx下建立的一個key,所以它的創建時間回比我們創建的所有關於鎖的key的創建時間要早,導致我們永遠獲取不到鎖。
詳細信息可以參考 cadem 這位博主的一篇文章 用Etcd實現分佈式鎖和選主
解決辦法:
謹慎選擇鎖的pfx的值,確定除了鎖之外不會在此之下創建或修改其他key