面试题答案
一键面试心跳检测机制基本工作原理
- 心跳信息发送频率:MongoDB副本集成员之间默认每2秒发送一次心跳信息。这种频繁的心跳发送,有助于副本集成员快速感知彼此状态变化。
- 携带内容:
- 成员状态:包括自身的状态,如是否是主节点(Primary)、从节点(Secondary)或仲裁节点(Arbiter)等。通过携带自身状态信息,其他成员可以实时了解整个副本集的布局。
- 操作日志(oplog)位置:从节点通过获取主节点oplog位置信息,来判断自己是否与主节点数据同步。如果从节点的oplog落后主节点较多,就会尽快追赶。
- 配置信息:副本集的配置信息也会在心跳中携带,比如副本集成员列表、优先级等信息。当配置发生变化时,成员可以通过心跳快速获取最新配置。
- 在维护副本集状态一致性方面的作用:
- 故障检测:如果一个成员在10秒(默认配置,可调整)内没有收到其他成员的心跳,就会认为该成员可能出现故障。例如,主节点挂掉,从节点会因为收不到主节点心跳,进而触发选举机制,选出新的主节点,保证服务的可用性。
- 选举机制触发:心跳信息中的成员状态和优先级等内容,是选举机制的重要依据。当需要选举新的主节点时,各成员根据心跳获取的信息,按照优先级等规则进行投票选举,确保选出最合适的节点作为主节点,维持副本集数据的写入和同步。
- 数据同步协调:从节点根据心跳中获取的主节点oplog位置,来协调数据同步工作。若从节点发现自己oplog落后,会主动从主节点拉取最新的oplog并应用,从而保证副本集内各成员数据的一致性。