MongoDB在replset模式下的failover有一个选举的过程,在整个过程中会有许多的状态监测和选举策略,理清这中间的逻辑将有助于判断机器状态突变后最终会达到怎样的稳定态。
文字描述太过繁琐,所以采用流程图的方式来梳理其中的逻辑:
有整个流程图可以看出,这个选举分为四个阶段:心跳检测,状态检测,选举和投票
- 1. 心跳检测阶段:
除了MongoDB实例down掉等意外原因外,MongoDB自身会保证最多4s会走一遍流程,这也保证了稳定状态下,primary一定是priority高的节点 - 2. 状态检测阶段:
这个阶段主要注意标黄的两个阶段,其中都有一个10s的条件,第一个是作为一个节点是否能成为备用节点的条件,而第二个则是是否需要step down primray的条件。而只有进入备用节点列表的节点才有资格进行后面的各种判断 - 3.选举阶段:
这个阶段就是从所有备用节点中选出具有发起投票的节点 - 4.投票阶段:
在这个阶段就是所有有投票资格的节点对发起投票的节点进行投票了,如果没有反对则选举primary成功
评论前必须登录!
注册