Zookeeper 中的法定人数与多数人数

Quorum vs majority in Zookeper

我已经阅读了很多关于 Zookeeper 的资料,但我还不明白的一件事是命名约定。我在文档中找不到任何关于它的信息,所有 Whosebug 问题和其他资源都以不同的方式使用法定人数的定义。所以我的问题是,法定人数到底是多少?

  1. 我们必须拥有多少服务器才能实现 健康 集成?这是:Q=2N+1 其中 N 是在不关闭整个服务的情况下可以关闭的节点数? (我们愿意支持的故障数)。在这种情况下,合奏的初始服务器总数就是我们所说的仲裁,所以如果我们想让我们的系统最多支持 2 个故障节点,则 Q=2*2+1=5,因此仲裁等于服务器数量?
  2. 法定人数是为了继续前进而必须就特定操作达成一致的服务器的多数数量。例如,如果 T 是服务器总数,那么法定人数也是 (T+1)/2 给出的多数数。

那么,到底什么是法定人数?我看到很多人在两个不同的概念中使用相同的名字。

看起来好像是乱用的,但是这两点是互斥的。一件事是建立一个健康的整体、有弹性和可靠的服务器数量,即使某些节点出现故障,也能获得法定人数,而另一件事是法定人数等于那个数字。另外,法定人数的定义是:

The minimum number of members of an assembly or society that must be present at any of its meetings to make the proceedings of that meeting valid.

这意味着我们可能有更多成员在我们需要做出决定时不可用(在这种情况下,服务器出现故障)。不仅如此,我在 Zookeeper 内部文档中发现了一个有趣的注释:

Atomic broadcast and leader election use the notion of quorum to guarantee a consistent view of the system. By default, ZooKeeper uses majority quorums, which means that every voting that happens in one of these protocols requires a majority to vote on. One example is acknowledging a leader proposal: the leader can only commit once it receives an acknowledgement from a quorum of servers.

Quorums 也可以在不同服务器上以分层方式配置或事件配置权重。

结论:

  1. 配置可靠且有弹性的整体的服务器数量是一个健康指标,您可以根据需要命名它,但它不是法定人数。
  2. 法定人数是需要对整体中的每个决定进行投票或发送确认的最少服务器数量,默认情况下为 (T+1)/2,其中 T 代表服务器总数。