面试题答案
一键面试选举机制工作过程
- 心跳检测:副本集中的每个成员都会定期向其他成员发送心跳消息,以检测彼此的状态。当主节点出现故障时,从节点会在一定时间内(通常为10秒)没有收到主节点的心跳,从而判定主节点故障。
- 选举发起:检测到主节点故障的从节点会发起选举。这些从节点需要满足一定条件才有资格参与选举,例如节点优先级不为0(通过
priority
字段设置,范围0 - 100,默认1),并且与大多数节点保持连接。 - 投票过程:参与选举的从节点会向其他具有投票权的节点发送选举请求。具有投票权的节点根据自身状态和配置决定是否投票给请求节点。通常,节点会优先投票给数据最“新”(即
oplog
最新)的节点,以确保选举出的数据最完整的节点为主节点。 - 选举结果:当一个节点获得大多数投票(副本集成员数的一半加1)时,它就会被选举为新的主节点。例如,一个包含5个成员的副本集,需要3票才能当选。
故障恢复及数据一致性和可用性保证
- 新主节点确认:新选举出的主节点会向其他节点发送确认消息,告知自己已成为主节点。其他节点收到确认消息后,会更新自己的状态,将新节点视为主节点。
- 数据同步:一旦新主节点确认,其他从节点会开始与新主节点进行数据同步。从节点会通过
oplog
(操作日志)来获取主节点上发生的最新数据变化,并应用这些变化到自己的数据集合中,以保证数据一致性。 - 重新配置:如果在主节点故障期间,副本集的成员状态或配置发生了变化,在新主节点选举完成后,副本集会进行重新配置,确保所有节点都能正确通信和工作,进一步保证系统的可用性。通过这些步骤,MongoDB副本集能够在主节点故障时快速进行故障恢复,维持数据的一致性和可用性。