天天看点

MongoDB-复制集选举规则

选举规则

  • 一旦发现主节点没有响应 / 发送心跳请求, 那么副节点就会认为主节点挂了
  • 一旦发现主节点挂了, 任意一个副节点都可以发起选举
  • (发起选举的节点我们称之为 ​

    ​候选节点​

    ​​, 每一个节点内部都有一个 ​

    ​选举计数器​

    ​)
  • 发起选举的节点会给自己先投一票, 然后将自己的票数依次发送给其它节点

其它节点收到投票请求后, 会先利用发送过来的票数同步自己计数器的票数:

  • 然后再对比自己的数据和候选节点的数据哪个更完整
  • 如果自己的更完整, 那么会投出反对票
  • 如果候选节点的更完整, 那么会投出赞同票
  • 最后如果超过半数的节点投出赞同票, 那么候选节点就会变成主节点
  • 最后如果没有超过半数节点投出赞同票, 那么其它节点会重新发起选举, 重复上述过程

!> 一个复制集中最多只能有 ​

​7​

​ 个投票节点

!> 如果某个节点没有返回投票结果, 那么默认就是不赞同, 挂掉的节点不会返回结果

!> 因为选举需要超过半数节点同意, 才会将副节点变成主节点, 所以在企业开发中一个复制集至少需要 3 个节点,否则一旦主节点挂了, 永远无法完成投票

触发选举的其它条件

  • 初始化复制集时, 会自动触发选举
  • 有新节点加入时, 会自动触发选举
  • 当前主节点挂掉时, 会自动触发选举