MongoDB 选举内部

标签 mongodb

我对 MongoDB 内部如何进行投票感到困惑。 MongoDB 文档似乎没有提供细节——他们只是在高层次上讨论了投票。这篇文章 ( Voting in MongoDB) 解释了结果,但没有解释内部结构。

根据我的研究,有两种可能的选择:

  1. 一名成员宣布参加竞选。 All voting members vote yes/no, and the member must receive a majority of yes's in order to be elected primary.
  2. 不知何故要求进行选举。所有有投票权的成员都投给一名成员。获得多数选票(如果有人获得)的人将成为主要选票。

我知道这些很相似,但我需要能够解释演示文稿的投票方式。 哪个选项是正确的?组合?

重要的后续问题:平局时会发生什么,或者如果没有成员获得多数票?

最佳答案

副本集设计的基础概念是基于这样一个事实,即在选举时有大部分副本集可用,即奇数成员(请参阅 mongodb 副本集体系结构文档)。实际上,这实际上是副本集中总票数的大部分,这并不一定意味着每个成员在 v3.0 (mongod) 之前有一票。

理想的选举是这样进行的:

  1. 触发选举
  2. 触发成员将询问其他成员是否会投票:(是,否,否决)
  3. 大多数人"is",它将移至主要
  4. 任何成员“否决”选举失败
  5. 在所有条件不变的情况下,成员投票选出具有最高优先级的成员
  6. 如果优先级最高的成员没有最新的optime,则选举过程将被否决
  7. 在平局中,默认将是它们在副本集配置中列出的顺序
  8. 成员在投赞成票之间必须等待 30 秒(降低多次初选的可能性)

抱歉缺少链接,我不能发布多个链接

仅供引用,我相信 v3.2 将实现一些(如果不是全部)RAFT 算法以达成共识

k chodorow 对选举的很好解释:http://www.kchodorow.com/blog/2012/01/04/replica-set-internals-bootcamp-part-i-elections/

关于MongoDB 选举内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799366/

相关文章:

c# - 如何通过将字典值作为过滤器参数来使用 C# 驱动程序查询 MongoDb 集合

mongodb - $maxDistance 在 MongoDB 中是如何测量的?

mongodb - 我可以根据 IP 地址对 Mongo 进行分片吗?

javascript - 密码不允许nodejs + mongodb

javascript - mongodb 查找查询不起作用

python - 从 Scrapy 管道中删除重复的项目?

python - 没有名为 pymongo 的模块

angularjs - LoopBack Angular SDK 的 upsert 在 PATCH 中包含 ID,导致错误

java - 如何使用 mongodb 应用程序修复 Spring Boot 中的 UnsatisfiedDependencyException?

javascript - 使用 Meteor 实现最简单的搜索