面试题答案
一键面试选举机制
- 心跳检测:副本集中成员通过心跳机制互相监测状态。当主节点发生故障,从节点和仲裁节点(若存在)在一定时间内收不到主节点心跳,判定主节点故障。
- 投票机制:
- 每个具有选举权的节点(通常数据节点才有选举权,仲裁节点无选举权)都有一票。
- 要成为新主节点,候选节点需获得大多数投票(超过副本集成员总数一半的票数)。例如,一个包含5个成员(数据节点)的副本集,新主节点需获得3票。
- 候选节点发起选举请求,向其他具有选举权的节点发送请求,其他节点根据自身状态(如数据的最新程度、优先级配置等)决定是否投票。
- 优先级:
- 副本集成员可配置优先级(0 - 1000),优先级高的节点在选举中更有优势。优先级为0的节点不能成为主节点。
- 若有多个高优先级节点,数据最新的节点更可能赢得选举。
对数据库可用性和数据一致性的影响
- 可用性:
- 快速恢复:选举机制能快速选出新主节点(通常在数秒到数十秒内),保障数据库对外服务的可用性,应用程序可尽快恢复读写操作。
- 短暂中断:选举期间,数据库会短暂无法提供写服务,读服务可能也会受到一定影响(如部分从节点可能在参与选举过程中暂停数据同步),但总体影响时间较短,对业务影响相对较小。
- 数据一致性:
- 多数派写入保证:选举机制基于多数派投票,新主节点的数据必然是多数节点认可的最新数据,这确保了数据一致性。只有当写入操作在多数节点成功,才会被视为成功,所以新主节点的数据不会丢失已确认的写入。
- 可能的数据同步延迟:选举完成后,新主节点可能需要与部分从节点进行数据同步,以确保所有节点数据一致。在同步完成前,可能存在数据不一致的短暂窗口,但MongoDB通过 oplog(操作日志)等机制保障最终一致性。