0

我有一个两个节点的 redhat 系统,每个系统都有一组相同的服务。我正在寻找一种方法来确定哪个服务是“负责”,哪个是“运行备份”。例如,例如;service-A 存在并在两个节点上运行,但只有一个节点应该在处理数据,而另一个节点则处于休眠状态,直到第一个节点崩溃。集合中的其他服务也是如此。

Zookeeper 的领导选举能力看起来就足够了;整个短暂和顺序的 znode 方法在纸面上看起来不错。例如,我想象我还需要在每个节点上运行一个 zookeeper 服务,以在节点故障时实现冗余。

但是文档指出了多个 zookeeper 需要至少 3 个实例才能保证在所有其他 zookeeper 中选举出领导 zookeeper 的法定人数的问题。由于我只有两个节点,这看起来像一个交易破坏者。

所以在我放弃 zookeeper 方法之前,我想我问一下 zookeeper 是否有一些配置选项来允许两个节点系统工作。否则我要去寻找下一个最适合我的问题的方法。

4

1 回答 1

1

您可以只使用两个实例来运行 Zookeeper。但是,它没有给您带来容错的好处,因为在这种情况下,法定人数是 2。其中任何一个失败都将导致 Zookeeper ensemble 拒绝客户端请求。这就是为什么 ensemble 的默认配置是 3 个 Zookeeper 实例的原因,因为拥有 2 个实例并不比拥有 1 个更好,那么为什么还要麻烦创建 2 个呢?它实际上会产生更多的故障点,因为当任一实例死亡时,您的 Zookeeper 集成停止,并且两个中的任何一个失败更可能只有一个失败。

于 2019-12-10T06:36:30.407 回答