MST

星途 面试题库

面试题:MongoDB副本集如何通过选举机制保障数据一致性

请阐述MongoDB副本集选举机制的原理,以及该机制如何在一定程度上保障数据的一致性,涉及到的关键步骤和条件有哪些?
35.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

MongoDB副本集选举机制原理

  1. 心跳检测:副本集中每个成员通过心跳机制定期向其他成员发送ping消息,以检测彼此的状态。如果某个成员在一定时间(默认10秒)内没有收到其他成员的心跳响应,就会认为该成员不可用。
  2. 优先级设定:每个副本集成员都有一个优先级(priority),取值范围是0到100,优先级高的成员在选举中更有优势成为主节点(Primary)。优先级为0的成员不能成为主节点,只能作为从节点(Secondary)。
  3. 选举过程:当主节点不可用时,具有选举权(votes)的成员(优先级不为0且状态正常)开始发起选举。首先,符合条件的成员会给自己投一票。然后,成员会将票投给优先级最高且状态正常的成员。如果有多个成员优先级相同,则按照成员的选举时间戳(election timestamp)来决定,时间戳大的成员会获得更多票。当某个成员获得超过半数的选票时,就会被选举为新的主节点。

保障数据一致性的方式

  1. 数据同步:从节点会不断从主节点同步数据,主节点将操作日志(oplog)发送给从节点,从节点应用这些操作日志来保持与主节点数据的一致性。
  2. 多数写确认:默认情况下,MongoDB的写操作会等待多数成员(超过副本集成员数量一半)确认写入成功后才返回。这确保了即使主节点发生故障,新选举出的主节点也能拥有最新的数据,从而保障数据一致性。

关键步骤和条件

  1. 选举发起条件:主节点失联,副本集成员检测到主节点在一定时间内没有心跳响应。
  2. 参与选举成员条件:优先级不为0,且自身状态正常(能够与其他成员进行通信)。
  3. 选举关键步骤
    • 成员发起选举并给自己投票。
    • 比较成员优先级,优先将票投给优先级高的成员。
    • 若优先级相同,比较选举时间戳,时间戳大的成员获更多票。
    • 获得超过半数选票的成员成为新主节点。
  4. 数据一致性保障关键步骤
    • 主节点记录操作日志并发送给从节点。
    • 从节点应用操作日志同步数据。
    • 写操作等待多数成员确认写入成功。