MongoDB 复制集概述| 8月更文挑战

136 阅读2分钟

这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战

MongoDB 复制集(Replica Set)的意义在于实现服务的高可用。它的实现基于 MongoDB 的两个特性:一个是数据写入一个节点时,可以立即被复制到另外的独立节点上;另一个是,当接受写入的节点出现故障后,能够从其它节点中自动选举出一个新的替代节点。

一个典型的 MongoDB 复制集,可以由 3 个具有投票权的节点组成,包括:

  • 一个主节点(PRIMARY),它可以接受写入操作,并且可以在选举时投票。
  • 两个(或更多的)从节点(SECONDARY),它们可以复制主节点上的新数据,并且可以在选举时投票。

CleanShot 2021-08-10 at 16.31.44@2x.png

数据的复制

当一个写操作(插入、更新、删除)到达主节点的时候,这个操作指令会被记录为 oplog,同一复制集中的从节点会在主节点打开一个游标,不断获取新进入的主节点 oplog,并在自己的数据上进行回放执行,从而保持跟主节点的数据一致。

CleanShot 2021-08-10 at 16.37.03@2x.png

出现故障后的选举

在一个复制集中,具有投票权限的节点,两两之间会互相发送心跳,如果连续 5 次未收到心跳通知,即判断为失联。如果失联的节点是主节点,则从节点会发起选举,选出新的主节点;如果失联的是从节点,则不产生新的节点。

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

在进行选举时,必须有大多数的节点是存活的,并且被选举的主节点必须满足如下条件:

  • 能够和多数节点之间建立联系
  • 具有最新的(准确说是相对比较新的)oplog
  • 如果节点配置了优先级,被选举的节点需要有相比较高的优先级

--

复制集的搭建放在下一篇。