【发布时间】:2014-09-30 05:29:40
【问题描述】:
我是动物园管理员的新手。我已经在一台机器上配置了它。但是我在zookeeper的文档中看到了“ensemble”和“quorum”这两个词。
谁能告诉我这些之间的区别?
- 合奏
- 法定人数
【问题讨论】:
标签: apache-zookeeper
我是动物园管理员的新手。我已经在一台机器上配置了它。但是我在zookeeper的文档中看到了“ensemble”和“quorum”这两个词。
谁能告诉我这些之间的区别?
【问题讨论】:
标签: apache-zookeeper
这个答案是给那些对Ensemble and Quorum的理解仍有疑问的人。 Ensemble 只不过是 Zookeeper 服务器的集群,其中 Quorum 定义了形成健康的 Ensemble 的规则。这是使用公式Q = 2N+1 定义的,其中Q 定义了形成一个健康的Ensemble 所需的节点数,它可以允许N 故障节点。您将在以下示例中了解此公式。
在开始举例之前,我想定义两件事 -
集群: 一组连接的节点/服务器(现在将使用 node),其中一个节点作为领导者/主节点,其余节点作为追随者/奴隶。
健康的整体:在任何给定时间点只有一个活动领导者的集群,因此容错。
让我用一个例子来解释一下,这个例子在定义Ensemble and Quorum时常用。
3 = 2N+1 => N = (3-1)/2 = 1,这可能允许 1 次失败。因此,当下一次故障发生(连接或节点故障)时,将不会选举任何节点作为 Leader,因此 Ensemble 不会提供任何写入/更新/删除服务,因此客户端集群的状态在 Zookeeper 集群节点之间保持一致.因此,Leader 选举只有在多数节点可用且已连接时才会发生,其中 Majority m = (n/2)+1,其中 n 代表上次选举发生时可用的节点数。所以在这里,第一次选举发生在 3 个节点上(作为一个 3 节点集群)。然后是第一次失败,所以剩下的 2 个节点可以进行选举,因为它们拥有多数 m = (3/2)+1 = 2。然后发生了第二次失败,现在他们没有多数,因为只有一个节点可供选举,但所需的多数是m = (2/2)+1 = 2。 4 = 2N+1 => N = (4-1)/2 = ⌊1.5⌋ = 1 //floor(1.5)=1 推导出它
5 = 2N+1 => N = (5-1)/2 = 2,这可能允许 2 次失败。6 = 2N+1 => N = (6-1)/2 = ⌊2.5⌋ = 2 推导出它
结论:
n(偶数)节点倾向于允许与 n-1(奇数)节点相同的故障数【讨论】:
Ensemble 是构成分布式计算机生态系统的节点(或服务器,如果您愿意)阵列。
法定人数是事情变得有趣的时候。在特定的任务/工作中,Quorum 确保可以维持健康的领导者-追随者多数。换句话说,确保获得多数票以继续进行活动的行为(例如提交/更新/删除等)。在 Replication 策略中,quorum 是必须的。
让我们尝试使用非技术示例:
1) 在贵公司 - 有一个由 5 位董事组成的董事会(全体)。
|d1, d2, d3, d4, d5|----- BoD
2) 每个董事在每个决定中都有平等的发言权。但是,如果 3 位董事在任何时候都应该就一个项目达成一致意见,则多数。如果没有多数派,公司就会运转不灵。
3) 一个特定项目,P1 - 他们随机投票让 d1、d2、d3 中的大多数人成为该项目的决策者。但 d4 和 d5 完全了解正在发生的事情(因此他们可以随时介入)。
4) 现在(上帝保佑),d3 几个月后去世了,每个人都同意使用 d1,d2,d4 形成多数。 d5 仍然知道发生了什么。请注意,我们只剩下 4 位董事。
5) 灾难再次降临。 d5 离开公司去了另一个竞争对手。但这并没有改变任何事情,因为该公司仍然拥有一个由 3 名成员组成的董事会。
6) 在另一场灾难袭击董事会的任何时候,任何董事都变得“不可用” - 公司功能失调,即我们失去了法定人数形成标准。
Zookeeper 使用ceil(N/2) - 1 公式来获取 Ensemble 允许的最大失败次数并保持稳定的仲裁。在这种情况下,推荐的最小集成节点为 3(最多容忍 1 个故障)。
【讨论】:
当您想在 zookeeper 服务器中获得高可用性时,您可以使用多个 zookeeper 服务器来创建一个 ensemble。基本上zookeeper具有主从架构。在一个合奏中,将有一个主人,其余的将是奴隶。如果主服务器失败,其中一个从服务器将充当主服务器。
分配master的顺序称为quorum。创建 ensemble 时,zookeeper 会在内部为从属服务器创建一个序列 ID。当主 master 失败时,它将检查下一个序列 ID 以创建一个新的 master。 在 zookeeper 中创建节点时也使用了这种仲裁的概念。
【讨论】:
ensemble:组中的节点数。 Quorum:采取行动所需的节点数。 示例:您有 5 个节点。 ensemble 是 5。但根据多数规则 Quorum 应该是 3。如果我们没有成功写入 3 个节点,那么我们向客户端发送成功响应。 Apache Zookeeper Quorum
【讨论】: