复制集概述
MongoDB复制集是指MongoDB实例通过复制并应用其他实例的oplog达到数据冗余的技术。MongoDB复制集一般由一个主服务器(Primary)和若干个备服务器(Secondary)组成。其中Primary用于处理客户端的请求,通过Primary将数据写入;Secondary从Primary同步数据,保存副本。当Primary服务器崩溃时,MongoDB复制集通过选举机制将其中一个Secondary服务器升级为Primary,保证复制集的高可用。
MongoDB在3.2版本对选举机制进行了一次较大的改动,可以通过shell查看选举协议版本:
PRIMARY> rs.conf().protocolVersion
NumberLong(1)
新的版本protocolVerson为1,通过MongoDB r3.2.0代码可以看到,心跳和选举基本以protocolVersion是否为1分叉处理。下面主要以PV1版本开始介绍MongoDB的选举机制,围绕选举周边只做简单介绍。
选举机制
MongoDB节点之间维护心跳检查,主节点选举由心跳触发。
心跳检查
MongoDB复制集成员会向自己之外的所有成员发送心跳并处理响应信息,因此每个节点都维护着从该节点POV看到的其他所有节点的状态信息。节点根据自己的集群状态信息判断是否需要更换新的Primary。
在实现的时候主要由两个异步的过程