需要对 Arbiter 在给定 mongoDB 副本集中的角色进行简单解释

Requires simple explanation on Arbiter's role in a given mongoDB replica set

我看到 MongoDB 官方网站解释了如何设置奇数成员副本。我还从同一站点听说过 Arbiter 这个词,根据我的理解,它不会被选为主要的,它会参与选举(来自 https://docs.mongodb.com/manual/core/replica-set-arbiter/)。

Why do we need an 'arbiter' in MongoDB replication?中还有一个Arbiter相关的post,然后又涉及到CAP定理,更复杂了。

首先,为什么要将成员数设为奇数?另外,有人可以用简单的外行英语向我解释这个 Arbiter 是什么以及它在给定副本集中的作用是什么吗??

提前致谢。

以 2 成员副本集为例:在网络分区的情况下,即 2 成员彼此失去联系,谁将成为主要成员?会有平局,需要决胜局。如果我们有一个 3 成员副本集,情况就不会是这样:包含两个节点的组将获胜,其中一个将成为主要节点。这是副本集中节点数量为奇数的要求的基础。至于仲裁器,它恰好很轻,所以我想可以通过安装一台更小的机器来省钱,因为我们不希望它保存任何数据,我们只需要它在场就可以投票基本的。

简而言之:就是阻止副本集的两个正常节点在失去联系的情况下陷入split-brain situation

MongoDB 副本集的设计目的是,如果一个或多个成员出现故障或失去联系,其他成员能够继续as long as between them they have a majority。多数条款很重要:如果没有它,您可能会遇到网络被一分为二的情况,并且分区每一侧的节点 认为 它们仍在进行副本集,并最终得到不同的数据集。

因此,为了避免脑裂问题,副本集的节点如果不能获得绝对多数,将不会继续。这方面的一个例子是,如果你有两个节点,在这样的副本集中:

如果他们失去沟通,结果是对称的:

每个人都会以同样的方式推理:

  • 意识到它已经失去了与对方的联系
  • 评估是否有可能让副本集继续运行
  • 意识到 1 个节点(共 2 个)不构成多数
  • 恢复到二级模式

仲裁者的不同之处

如果有第三个节点,那么即使两个主节点失去联系,也会有一个与仲裁者保持联系。这允许两个主节点做出不同的决定,并在避免裂脑问题的同时保持副本集的运行。

考虑以下 3 节点副本集示例:

无论网络分区以何种方式进行,一个节点仍将与仲裁器保持联系;例如像这样:

节点 A 将:

  • 意识到它既不能联系节点 B 也不能联系仲裁者
  • 评估是否有可能让副本集继续运行
  • 意识到 1 个节点(共 3 个)不构成多数
  • 恢复到二级模式

而节点 B 能够做出不同的反应:

  • 意识到它无法联系节点 A,但仍然与仲裁器联系
  • 评估是否有可能让副本集继续运行
  • 意识到 2 个节点(共 3 个) 构成多数
  • 接任小学

这也说明了 how you should deploy an arbiter 获得该好处:

  1. 尝试将仲裁器放在一个独立于两个数据承载节点的系统上,以最大限度地提高它仍然能够与 或者 整个网络问题进行通信的机会
  2. 不需要存储数据,所以不需要高规格的硬件
  3. 只需1个仲裁器就可以打破僵局;你不会从多个仲裁者那里得到任何好处