面试题答案
一键面试1. 相关机制
- 心跳检测
- MongoDB副本集中每个节点会定期向其他节点发送心跳包(默认2秒)。当主节点故障时,从节点会因为无法收到主节点的心跳而感知到故障。
- 心跳检测不仅用于故障检测,还用于副本集成员间的状态同步和信息交换。
- 选举机制
- 当检测到主节点故障后,符合条件的从节点(如具有最新oplog且优先级足够等)会发起选举。
- 选举采用多数决原则,只有获得大多数投票(副本集成员数的一半以上 + 1)的节点才能成为新的主节点。
- 操作日志(oplog)
- oplog记录了主节点上所有的数据修改操作。从节点通过复制oplog来保持与主节点的数据同步。
- 在故障转移后,新主节点会将自己的oplog与其他从节点的oplog进行对比和协调,以确保数据一致性。
- 版本兼容性
- MongoDB具有一定的版本兼容性策略。不同版本的节点在副本集中协同工作时,高版本节点会兼容低版本节点的功能。
- 例如,高版本节点不会使用低版本节点不支持的特性,以保证数据操作的一致性。
2. 实现步骤
- 故障检测
- 从节点在设定时间内(默认10秒)未收到主节点的心跳,标记主节点为不可用,开始准备发起选举。
- 选举新主节点
- 符合选举条件的从节点(优先级高、数据最新等)向其他节点发送选举请求。
- 其他节点收到选举请求后,根据一定规则(如oplog的新旧程度、节点优先级等)决定是否投票。
- 获得大多数投票的节点成为新的主节点。
- 数据同步
- 新主节点启动后,会向从节点发送自己的oplog。
- 从节点对比自己的oplog与新主节点的oplog,对于缺失的操作,从新主节点拉取并应用。
- 在不同版本节点的情况下,高版本节点会按照版本兼容性规则,对oplog中的操作进行调整,确保低版本节点能够正确应用。
- 重新配置副本集
- 新主节点选举完成并完成数据同步后,副本集会重新调整配置,确保所有节点知晓新的主节点以及副本集的最新状态。
- 客户端连接也会根据副本集的新配置进行调整,以保证数据读写的正常进行。