两节点 ZooKeeper 集成

Two node ZooKeeper ensemble

我们有一个只有两个数据中心的设置,每个数据中心只有一台机器,我们希望将 ZooKeeper 节点部署到这两台机器上,并将它们集群化。我们无法向集群添加任何新机器。

目前我们有两个 ZooKeeper 节点 A 和 B,一个在机器 A 上,一个在机器 B 上。我们必须能够容忍单个机器的故障,另一个 ZooKeeper 实例必须保持可运行。

我从 ZooKeeper 文档中了解到,建议至少使用三个节点 - 因为协调机制需要大多数节点处于活动状态才能继续(在这种情况下为两个)。

我的问题是 - 是否有可能获得仅由两个节点组成的高可用性 ZooKeeper 部署?

没有。如果 Zookeeper 2 个节点不够用。即使您的一个节点出现故障,其余节点也无法判断它是已关闭还是只是分区。这会导致不一致,即大脑分裂的情况,因为他们都将继续为他们的客户提供服务。

我不确定 Zookeeper 是否会形成一个集群,或者只是 运行 在独立模式下。查看此答案:Zookeeper running on two nodes

在您的情况下,只有 2 台机器,您可以考虑在其中一台机器上放置第二个 Zookeeper 实例并制作一个 3 节点集群。

这在容错方面对您没有多大帮助。这类似于 运行 在具有第二个实例的机器上安装独立 ZK。它可能会加快读取请求的速度,或者让您在增长到 3 台或更多机器后更容易迁移到适当的集群设置。它还会增加您的操作复杂性和写入速度。

您还可以研究分层仲裁和观察者,它们可能对跨多个数据中心的集群有用。