领导人选举:Etcd vs Zookeeper vs Hazelcast

Leader election with: Etcd vs Zookeeper vs Hazelcast

我们正在为由多个(例如 3 个)实例组成的高可用性服务(用 Java 编写)实施领导选举。我们的目标是在任何给定时间只有一个实例处于活动状态。

很高兴听到您对以下选项的意见:

1) 淡褐色。使用 "quorum" 和一把锁,我们可以实现领导人选举。但是,我们可以 运行 解决脑裂问题,在一段时间内可能会出现两个领导者。另外,Hazelcast 似乎不支持 SSL。

2) 动物园管理员。我们可以在 Zookeeper 集成之上实现领导者选举(其中 ZK 节点在我们服务的每个实例上 运行)。 Zookeeper 是否提供比 Hazelcast 更好的一致性保证?它是否也存在脑裂问题?

3) 等等。我们可以使用 Jetcd 库,它似乎是最现代、最强大的技术。在一致性方面真的比Zookeeper更好吗?

谢谢。

1) Hazelcast 3.12 版提供了一个 CPSubsystem,就 Hazelcast 集群内部的 CAP and built using Raft 共识算法而言,它是一个 CP 系统。 CPSubsytem 有一个名为 FencedLock 的分布式锁实现,可用于实现领导者选举。

有关 CPSubsystemFencedLock 的更多信息,请参阅;

3.12之前的Hazelcast版本不适合leader选举。正如您已经提到的,它可以在网络分裂期间选择可用性,这可能导致选举多个领导者。

2) Zookeeper 没有上述的脑裂问题,当网络分裂发生时,你不会观察到多个领导者。 Zookeeper 建立在 ZAB 原子广播协议之上。

3) Etcd 使用 Raft 共识协议。 Raft 和 ZAB 有类似的一致性保证,都可以用来实现领导者选举过程。

Disclaimer: I work at Hazelcast.