面试题答案
一键面试主从节点之间的数据同步方式
- ** oplog(操作日志)**
- MongoDB主节点(Primary)将所有的写操作记录到本地的oplog中。oplog是一个特殊的、有固定大小的、以时间戳顺序记录的集合,位于local数据库中。
- 从节点(Secondary)会定期轮询主节点,获取主节点oplog中自上次同步后新增的记录。
- 复制过程
- 从节点连接到主节点,请求获取oplog的更新。主节点根据从节点当前同步的位置(通过记录在从节点本地的同步点信息),将相应的oplog条目发送给从节点。
- 从节点接收到oplog条目后,会在本地按照oplog中的操作顺序重放这些写操作,从而保持与主节点数据的同步。
确保事务在副本集内的一致性
- 写操作确认机制
- MongoDB提供了不同级别的写操作确认(Write Concern)。例如,
w:1
表示写操作只需在主节点确认写入成功即可返回;w:majority
则要求写操作在大多数节点(包括主节点和足够数量的从节点)确认写入成功后才返回。通过设置合适的写操作确认级别,可以保证事务的部分一致性。当设置w:majority
时,意味着至少有半数以上节点(包括主节点)写入成功,即使主节点故障,也能从大多数节点中选出新的主节点,并且新主节点的数据是包含了已确认写操作的数据,从而保证数据一致性。
- MongoDB提供了不同级别的写操作确认(Write Concern)。例如,
- 选举机制
- 当主节点出现故障时,副本集需要进行选举以选出新的主节点。选举算法基于心跳机制和节点状态。节点之间通过定期发送心跳信息来检测彼此的状态。
- 只有数据最新且符合选举条件(如具有最新的oplog,节点状态正常等)的从节点才有资格被选举为新的主节点。这样确保新主节点的数据是最完整的,从而维持事务在副本集内的一致性。
- 多文档事务支持
- 在MongoDB 4.0及以上版本,副本集支持多文档事务。事务开始时,会为事务分配一个全局事务编号(GTID)。
- 主节点协调事务的执行,在事务提交阶段,主节点会将事务涉及的所有写操作记录到oplog中,并确保这些oplog记录按照事务的顺序传播到从节点。从节点重放这些oplog记录时,也会按照事务顺序进行,从而保证事务在副本集内各个节点的一致性。