MongoDB多节点集群原理 -- 复制集

前言

MongoDB是有高可用的方案的,就是我们最熟悉的多节点部署,而在MongoDB中,MongoDB多节点集群的专业术语叫做复制集

目录

高可用的概念

MongoDB复制集常见的用途

MongoDB节点

MongoDB节点类型

MongoDB节点选举和投票

选举中<大多数>的概念

节点之间数据复制过程

故障恢复选举过程

选举的前提条件

选举过程

选举过程中避免出现票数相等的僵局方法


高可用的概念

通俗的来讲,高可用就是保证不让数据库有掉线的情况

使用多个节点,当一个节点倒下,另外一个节点会自动的替代进行服务

实现原理: 数据写入会使用复制集将数据复制到另外节点上,写节点故障时,自动选举一个新的替代节点

MongoDB复制集常见的用途

1、高可用

2、可以对数据跨区域复制,解决用户跨区域访问数据较慢的问题,比如,如果我们可以在国外进行数据分布,就大大加速了国外当地访问我们MongoDB的速度

3、复制多个节点,做读写分离操作,对节点进行减压

MongoDB节点

MongoDB节点类型

MongoDB节点分为主节点、从节点、投票节点

主节点: 一般负责MongoDB数据的修改操作

从节点: 一般负责MongoDB数据的读取操作

投票节点:就是专一为MongoDB选举投票使用,本身节点没有数据,不能参加选举

MongoDB节点选举和投票

主节点和从节点既有投票权又有选举权

投票节点只有投票权

选举基于EAFT一致性算法,选举成功的条件是大多数投票节点存活,并且其中一个节点获得大多数投票

故障节点既没有选举权也没有投票权

选举中<大多数>的概念

有N个节点,那么大多数就是要大于等于 + 1

所有根据计算,投票节点至少要有3个,才会出现一个节点有大多数投票数选举成功

节点之间数据复制过程

1、当对主节点进行修改操作的时候,数据的修改操作日志会被记录下来,放到集合中,这个集合称为oplog

2、通过一个线程监听这个集合变动,有变动就会读取到从节点,在从节点上进行还原

故障恢复选举过程

选举的前提条件

1、具有投票权的节点之间相互发送心跳,当5次心跳都未收到判断节点失联

2、只有失联节点是主节点才会发起选举

选举过程

只有失联节点是主节点才会发起选举,从节点会发起选举,选出新的主节点

选举基于EAFT一致性算法,选举成功的条件是大多数投票节点存活,并且其中一个节点获得大多数投票

在选举过程中基本上不会出现票数相等的僵局的,这是经过程序优化过的

复制集中最多可以有50个节点,但具有投票权的节点最多7个

选举过程中避免出现票数相等的僵局方法

随机延迟机制

多个从节点检测到主节点失联之后,会有一个随机延迟机制,随机等待一下再发起选举,避免多个从节点同时发起选举出现竞争情况

优先级权重

同时设置从节点选举的时候的优先级权重,即使出现多个从节点进行竞争,在优先级权重的加持下也基本上不可能产生两个同时发起选举的从节点最终票数相同无法选举出主节点的僵局