分布式锁&leader选举——如何保证leader只有在持有锁时才工作?

问题描述 投票:0回答:0

使用分布式锁库例如Consul实现leader选举时(有2个节点消费消息,但其中只有1个节点必须获取分布式锁成为leader并实际处理消息,另一个节点必须保持被动状态,只变为主动状态如果当前活动的节点死亡或变得不健康或无响应。

我们如何处理当前领导者在 Consul 中被罢免并且其持有的锁被释放并且备份/被动节点成为新领导者的场景。但是由于某种原因,前任领导者并不知道它已被罢免,并且仍然认为自己是领导者。所以我们现在的情况是有 2 个领导者。这可能会发生,例如由于网络速度慢/垃圾收集等原因,前任领导者速度慢并且认为其持有的分布式锁的租约尚未到期,而在 consul 中,锁上的 ttl 已到期,因此锁被释放。

Consul does have the concept of a watch handler which is basically a callback function within each node that is called whenever a new leader is elected.但是如果调用回调函数有一些延迟,那么一段时间内仍然有 2 个领导者。

一种方法可能是进行检查以确保认为自己是领导者的节点,在执行必须由领导者完成的任务之前检查确实是领导者。有没有处理这种情况的例子

仍在致力于使用 spring boot 和 consul 实现 Consul 分布式锁。我正在尝试找出如何设计/处理上述极端情况

spring-boot consul spring-cloud-consul leader-election distributed-lock
© www.soinside.com 2019 - 2024. All rights reserved.