前言
之前在学习MongoDB复制集时发现网上的很多相关的分享都是针对r3.2.0以前的版本,新版本对选举机制做了较大的更改,但是在网上大多都是一笔带过。于是写过一篇《MongoDB选举机制》。当时主要结合了官网最新的文档和部分源码。由于官网介绍比较泛泛,源码阅读的时候又受限于个人能力与时间,最终只整理了选举相关的核心逻辑,对应复杂的条件检查和数据结构没有深入的了解。最近了解了一些分布式一致性算法之后,打算换一个角度从协议层面重新整理一下MongoDB的选举。本文简要介绍分布式系统一致性相关的概念,重点介绍Bully算法和Raft算法在MongoDB选举中的应用。
分布式系统简介
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。分布式系统具有分布性、对等性、并发性、缺乏全局时钟、故障总会发生的特点,由于这些特点导致了分布式系统中的一致性难题。
CAP理论
分布式系统的CAP理论:
CAP理论告诉我们,一个分布式系统不可能同时满足一致性(C),可用性(A),分区容错性(P)这三个基本需求,最多只能同时满足其中两项。
- 分布式环境中的一致性是指数据在多个副本之间是否能够保持一致的特性。
- 可用性是指系统必须一致处于可用的状态,对用用户的请求能够在有限时间内返回结果。其中,“有限时间”是相对的,是用户可接受的合理响应时间;“返回结果”是期望的结果,可以是成功或失败,不能是用户不能接受的结果。
- 分布式系统在遇到网络分区故障时,仍能够对外提供满足一致性和可用性的服务,除非整个网络发生故障。
由于分区容错性是分布式系统首先要保证的,所以只能在一致性和可用性之间找平衡。
BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致)三个短语的简写,基于CAP发展而来,主要解决一致性和可用性之间的平衡。
- 基本可用是指允许故障发生时损失部分可用性,但不是说系统不可用。比如MongoDB选举过程中系统是只读的。
- 软状态是指允许数据存在中间状态,既允许数据不同副本之间的同步过程存在延时。
- 最终一致是指数据副本在经过一段时间的软状态后最终达到一致。最终一致是一种特殊的弱一致性。
Paxos,Raft,ZAB等常见的分布式一致性算法都是符合BASE理论。
MongoDB的选举机制
MongoDB复制集的目的是提供高可用性,如果一个写操作被复制到大多数节点,只要任意大多数节点可用,那么数据就是可靠的。复制集一般包含一个Primary和若干个Secondary节点。选举机制主要负责在集群初始化及节点发生变化时重新选举主节点,保