30

来自ZooKeeper 常见问题解答

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 的解释是:

通常,这是预计出席会议的大多数人,尽管许多团体的法定人数可能较低或较高。

4

2 回答 2

27

Zookeeper 要求您有一个法定人数的服务器,其中法定人数是ceil(N/2). 对于 3 个服务器的 ensemble,这意味着 2 个服务器必须随时启动,对于 5 个服务器的 ensemble,3 个服务器需要随时启动。

于 2012-10-23T03:41:15.600 回答
4

基本上,与失败的 Zookeeper 相比,只要 Active Zookeeper 占多数,Zookeeper 就可以正常工作。此外,在偶数仲裁大小的情况下,即 2、4、6 等。失败 = 活动,因此不推荐。

3 和 4 都只能处理 1 个故障,那么为什么我们要使用 4 个 Zookeepers 而不是 3 个。

在此处输入图像描述

于 2018-09-12T11:01:55.307 回答