gpt4 book ai didi

mongodb - 需要简单解释 Arbiter 在给定的 mongoDB 副本集中的角色

转载 作者:可可西里 更新时间:2023-11-01 09:58:44 25 4
gpt4 key购买 nike

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

Why do we need an 'arbiter' in MongoDB replication?里面也有Arbiter相关的帖子然后涉及到 CAP 定理,这进一步使事情变得更加复杂。

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

提前致谢。

最佳答案

简而言之:就是阻止副本集的两个正常节点进入split-brain situation如果他们彼此失去联系。

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

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

2-node replica set in normal running

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

2-node replica set after network partition

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

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

仲裁者的不同之处

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

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

3-member replica set in normal running

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

Network partition

节点A将:

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

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

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

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

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

关于mongodb - 需要简单解释 Arbiter 在给定的 mongoDB 副本集中的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43083246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com