我对 MongoDB 内部如何进行投票感到困惑。 MongoDB 文档似乎没有提供细节——他们只是在高层次上讨论了投票。这篇文章 ( Voting in MongoDB) 解释了结果,但没有解释内部结构。
根据我的研究,有两种可能的选择:
- 一名成员宣布参加竞选。 All voting members vote yes/no, and the member must receive a majority of yes's in order to be elected primary.
- 不知何故要求进行选举。所有有投票权的成员都投给一名成员。获得多数选票(如果有人获得)的人将成为主要选票。
我知道这些很相似,但我需要能够解释演示文稿的投票方式。 哪个选项是正确的?组合?
重要的后续问题:平局时会发生什么,或者如果没有成员获得多数票?
最佳答案
副本集设计的基础概念是基于这样一个事实,即在选举时有大部分副本集可用,即奇数成员(请参阅 mongodb 副本集体系结构文档)。实际上,这实际上是副本集中总票数的大部分,这并不一定意味着每个成员在 v3.0 (mongod) 之前有一票。
理想的选举是这样进行的:
- 触发选举
- 触发成员将询问其他成员是否会投票:(是,否,否决)
- 大多数人"is",它将移至主要
- 任何成员“否决”选举失败
- 在所有条件不变的情况下,成员投票选出具有最高优先级的成员
- 如果优先级最高的成员没有最新的optime,则选举过程将被否决
- 在平局中,默认将是它们在副本集配置中列出的顺序
- 成员在投赞成票之间必须等待 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/