ZooKeeper 可靠性 - 三个与五个节点

Posted

技术标签:

【中文标题】ZooKeeper 可靠性 - 三个与五个节点【英文标题】:ZooKeeper reliability - three versus five nodes 【发布时间】:2012-10-12 21:37:32 【问题描述】:

来自ZooKeeper FAQ:

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 定义 quorum 的方式是 ceil(N/2),其中 N 是集合中的原始数字(而不仅仅是当前可用的集合)。

现在,谷歌搜索 ZK quorum 在 HBase 书籍 chapter on ZK 中找到了这个:

在 ZooKeeper 中,支持偶数个对等点,但通常是 没有使用,因为一个均匀大小的合奏需要,按比例,更多 同龄人组成的法定人数超过了奇数规模的合奏所需的人数。为了 例如,一个有 4 个对等点的 ensemble 需要 3 个来形成一个仲裁,而 一个 5 人的合奏也需要 3 人才能形成一个法定人数。于是,一个合奏 5 允许 2 个对等方失败并仍然保持仲裁,因此更多 比 4 的 ensemble 容错,它只允许 1 个 down peer。

还有 Edward J. Yoon 的 blog 中对 Wikipedia 的解释:

通常情况下,大多数人预计会在那里, 尽管许多团体的法定人数可能较低或较高。

【问题讨论】:

什么是“计划维护”的例子? 【参考方案1】:

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

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

【讨论】:

似乎很有趣的观察,请您详细说明从“多数”列中解释什么。【参考方案2】:

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

【讨论】:

为什么不推荐4节点集群? 我在这里同意@Pangea。这意味着 5 节点集群只能支持 2 次故障(第 3 次故障将低于 3 的仲裁),而 4 节点集群也可以支持 2 次故障(第 3 次故障将低于 2 的仲裁)。 @Pangea,见zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html ...只要大多数合奏都启动,服务就可用。因为 Zookeeper 需要多数,所以最好使用奇数台机器。 ....还注意到,如果节点数量为偶数,您也会面临脑裂的风险,假设您有 8 个节点,并且网络分为 2 个部分,每侧有 4 个节点...每 (4) 个节点侧将无法继续,因为他们没有法定人数。 看起来应该是ceil((N+1) / 2)。一个 4 的集合的法定人数应该是 3,而不是 HBase 书中提到的 2。

以上是关于ZooKeeper 可靠性 - 三个与五个节点的主要内容,如果未能解决你的问题,请参考以下文章

iptables四个表与五个链间的处理关系

zookeeper简单介绍

Zookeeper的功能以及工作原理

Zookeeper实战之单机集群模式

一些插件的开机自启动设置

SonarLint扫描后的三类问题与五种等级