Reliability:
A single ZooKeeper server (standalone) is essentially a coordinator with
no reliability (a single serving node failure brings down the ZK service).
A 3 server ensemble (you need to jump to 3 and not 2 because ZK works
based on simple majority voting) allows for a single server to fail and
the service will still be available.
So if you want reliability go with at least 3. We typically recommend
having 5 servers in "online" production serving environments. This allows
you to take 1 server out of service (say planned maintenance) and still
be able to sustain an unexpected outage of one of the remaining servers
w/o interruption of the service.
对于 3 台服务器的集合,如果一台服务器停止轮换并且一台服务器发生意外中断,那么还有一台剩余的服务器应确保服务不会中断。那么为什么需要5台服务器呢?或者它不仅仅是正在考虑的服务中断?
更新:
感谢@sbridges 指出它与维持法定人数有关。ZK 定义法定人数的方式是集合中的原始ceil(N/2)
数字在哪里(而不仅仅是当前可用的集合)。N
现在,谷歌搜索 ZK quorum 在关于 ZK 的 HBase 书籍章节中找到了这个:
在 ZooKeeper 中,支持偶数个对等点,但通常不使用它,因为偶数大小的 ensemble 按比例需要比奇数大小的 ensemble 需要更多的对等点来形成仲裁。例如,一个有 4 个对等点的 ensemble 需要 3 个来形成一个 quorum,而一个有 5 个 peer 的 ensemble 也需要 3 个来形成一个 quorum。因此,一个 5 的 ensemble 允许 2 个 peer 失败并仍然保持仲裁,因此比 4 的 ensemble 更容错,后者只允许 1 个 down peer。
在 Edward J. Yoon 的博客中对 Wikipedia 的解释是:
通常,这是预计出席会议的大多数人,尽管许多团体的法定人数可能较低或较高。