1.选举协议
下面是官网对老版本和新版本复制协议的简洁说明:
pv0: 基于priority 和 optime 选举新主,依赖clock synchronization。
有选举权的节点,每一轮选举最多投一票,在30s内,不能重复投票。
pv1:基于Raft协议,每个成员都有 对候选主列表成员投赞成或者反对票,不是单方面否决选举,没有节点投反对票,且获得赞成票数超过有权投票节点总数的1/2,则能成为Primary。否则进入下一轮选举。
因使用了Raft协议,加快 back-to-back选主,减少整个选举新主所需花费的总时间,相应的会增加WriteConcern(w:1)rollback的可能性。
Raft将时间分为多个term,term以连续的整数来标识,每个term以一次election开始,如果有server被选为leader,则该term的剩余时间该server都是leader。
有些term里,可能并没有选出leader,这时候会开启一个新term来继续选主,如上图中的t3。
2.怎么选举?
选举:
假设X是一个Secondary,那么X会定时检测是否需要选举自己成为Primary。其检测内容包括:
1) 是否集群中有其它节点认为自己是Primary?
2) X节点自己是否已经是Primary?
3) X节点自己是否有资格成为Primary?
如果这三个问题中的任何一个回答是否定的,那么X节点就不会试图把