MST

星途 面试题库

面试题:MongoDB副本集初始化后的数据一致性保障机制

当MongoDB副本集初始化完成,在后续数据读写过程中,是通过哪些机制来保障数据一致性的?详细说明这些机制的工作原理。
31.7万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

数据同步机制

  1. ** oplog (操作日志)**
    • 原理:主节点(Primary)执行写操作时,会将这些写操作记录到 oplog 中。oplog 是一个固定大小的集合,以时间顺序记录所有影响数据集的操作。从节点(Secondary)会定期轮询主节点的 oplog,获取新的操作记录,并在本地应用这些操作,从而保持与主节点的数据同步。例如,主节点插入一条新文档,该插入操作会记录到 oplog 中,从节点获取到这个 oplog 记录后,在本地执行相同的插入操作。
  2. 心跳机制
    • 原理:副本集中的节点之间通过心跳消息(每 2 秒发送一次)来保持联系。主节点通过心跳消息向从节点发送自身状态以及 oplog 的位置信息等。从节点通过心跳消息向主节点汇报自己的状态。如果主节点在一定时间(默认10秒)内没有收到某个从节点的心跳,会认为该从节点不可用,并采取相应措施(如重新选举等)。这确保了数据同步链路的稳定,若从节点故障能及时被发现和处理,保障数据同步的连续性。

选举机制

  1. 选举过程
    • 原理:当主节点发生故障时,副本集需要选举出一个新的主节点以保证数据的正常写入。选举基于节点的优先级(通过 priority 配置,范围 0 - 1000,默认 1)和日志时间戳等因素。具有最高优先级且数据最“新”(日志时间戳最新)的节点有更大机会被选举为主节点。例如,有三个节点 A、B、C,A 优先级为 5,B 优先级为 3,C 优先级为 1 ,如果 A 节点故障,在满足选举条件下,B 节点更有可能被选举为新的主节点。在选举过程中,节点之间通过投票来确定新主节点,每个节点都有一票,需要超过半数节点投票才能当选。
  2. 仲裁节点
    • 原理:仲裁节点(Arbiter)不存储数据,仅参与选举投票。它的作用是帮助决定选举结果,特别是在副本集节点数量为偶数时。例如,有两个数据节点 A 和 B,引入仲裁节点 C 后,在选举时,若 A 和 B 都希望成为主节点,仲裁节点 C 的投票就起到关键作用,确保能选举出唯一的主节点,避免出现脑裂问题,保证数据写入的一致性。

读操作一致性机制

  1. 读偏好(Read Preference)
    • 原理:客户端可以通过设置读偏好来决定从哪个节点读取数据。例如,primary 读偏好表示从主节点读取数据,能保证读取到最新的数据,但可能会对主节点造成较大负载;secondaryPreferred 表示优先从从节点读取数据,若从节点不可用则从主节点读取,这样可以分担主节点负载,但可能读取到的数据不是最新的(因为从节点同步有一定延迟)。通过合理设置读偏好,在保证业务对数据一致性要求的同时,平衡系统的读写性能。
  2. 因果一致性(Causal Consistency)
    • 原理:MongoDB 4.0 引入了因果一致性读。当客户端在主节点执行了一系列写操作后,后续从从节点读取数据时,MongoDB 保证从节点能按照与主节点相同的因果顺序返回数据。例如,客户端先在主节点插入文档 A,再更新文档 A ,因果一致性保证从从节点读取时,能先读取到插入的文档 A ,再读取到更新后的文档 A ,而不会出现先读取到更新后的文档 A 却还未读取到插入的文档 A 的情况,从而保障了数据在读写顺序上的一致性。