首先有个locker节点,它是一个持久节点。在获取分布式锁的时候,所有客户端在locker节点下创建临时顺序节点,释放锁的时候删除该临时节点。
客户端先获取locker下面的所有子节点,获取到所有的子节点path之后,如果发现自己在所有子节点中序号最小,那么就认为获取到了锁。如果发现自己创建的节点并非locker所有子节点中最小的,说明自己还没有获取到锁。
当没有获取到锁的时候,客户端需要找到比自己小的那个节点,对其注册事件监听器。当这个被关注的节点删除时,客户端会收到相应通知,此时再次判断自己创建的节点是否是locker子节点中序号最小的,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。
leader选举大致也是上述步骤。