假设我们设置了一个没有仲裁器的 MongoDB 复制,如果主节点不可用,则副本集将选择一个从节点作为主节点。所以我认为这是一种隐含的仲裁者,因为副本会自动选择一个主节点。
所以我想知道为什么我们需要一个专用的仲裁节点?谢谢!
假设我们设置了一个没有仲裁器的 MongoDB 复制,如果主节点不可用,则副本集将选择一个从节点作为主节点。所以我认为这是一种隐含的仲裁者,因为副本会自动选择一个主节点。
所以我想知道为什么我们需要一个专用的仲裁节点?谢谢!
我创建了一个电子表格来更好地说明副本集中仲裁节点的效果。
它基本上归结为以下几点:
此处[详细] 解释了选举。在该文件中,它指出一个 RS 可以有 50 个成员(偶数)和 7 个投票成员。我强调“状态”,因为它没有解释它是如何工作的。在我看来,如果你发生分裂,一方有 4 名成员(全部投票),另一方有 46 名成员(3 名投票),你宁愿让 46 人选举初选而 4 人作为阅读 -只有集群。但是,这正是“有限投票”所阻止的。在这种情况下,您实际上将拥有一个 4 成员集群,其中一个主集群和一个 46 成员集群是只读的。解释这是怎么回事超出了这个问题的范围,也超出了我的知识范围。
这实际上归结为 CAP 定理,即如果分区两侧的服务器数量相等,则数据库无法维护 CAP(一致性、可用性和分区容限)。仲裁器专门设计用于在一侧创建“不平衡”或多数,以便在这种情况下可以选择主节点。
如果您在任一侧获得偶数个节点,MongoDB 将不会选择主节点,并且您的集合将不接受写入。
我的意思是,例如,一侧有 2 个,另一侧有 2 个。我的英语在那儿听不懂。
所以我真正的意思是双方。
维基百科为解释 CAP 提供了一个很好的案例:http ://en.wikipedia.org/wiki/CAP_theorem
由于以下原因,在复制中必须有一个仲裁器:
希望这可以帮助 !!!
仲裁器是一种可选机制,当您在副本集中部署了偶数个 mongod 时,它允许投票成功。仲裁器是轻量级的,意味着部署在不是专用 mongo 副本的服务器上,即:服务器的主要角色是其他一些任务,例如 redis 服务器。由于它们很轻,它们不会(明显)干扰系统的资源。
从文档:
仲裁者没有数据集的副本,也不能成为主节点。副本集可能有仲裁者在主节点选举中添加投票。仲裁器允许副本集具有奇数数量的成员,而不会产生复制数据的成员的开销。