面试题答案
一键面试Oplog 定义
Oplog
(操作日志,即 Operation Log)是 MongoDB 副本集中主节点(Primary)上的一个特殊的、固定大小的集合,位于local
数据库中。它以时间顺序记录了主节点上所有对数据产生修改的操作。
在副本集数据同步中的作用
- 数据复制:副本集中的从节点(Secondary)通过复制主节点的
Oplog
来保持与主节点数据的一致性。从节点不断地从主节点拉取Oplog
中的操作,并在本地应用这些操作,从而实现数据的同步。 - 故障恢复:当主节点发生故障时,副本集中的其他节点可以通过应用
Oplog
中的操作来恢复到故障前的状态,以便选举出新的主节点并继续提供服务。
基本工作原理
- 主节点记录操作:当主节点上执行任何写操作(如插入、更新、删除等)时,MongoDB 会将这些操作记录到
Oplog
中。每个Oplog
记录包含了操作的详细信息,如操作类型、操作的集合、修改的文档等。 - 从节点拉取 Oplog:从节点会定期轮询主节点,获取自上次同步以来主节点
Oplog
中新增加的记录。从节点通过维护一个同步点(即上次同步的最后一条Oplog
记录的位置)来确定需要拉取哪些新的Oplog
记录。 - 从节点应用操作:从节点在拉取到新的
Oplog
记录后,会按照记录的顺序在本地数据库上依次应用这些操作,从而使本地数据与主节点数据保持一致。在应用操作过程中,如果遇到错误,从节点会停止同步并记录错误信息,管理员需要手动处理这些错误以恢复同步。 - Oplog 循环利用:由于
Oplog
是固定大小的集合,当Oplog
空间使用满时,MongoDB 会覆盖最早的Oplog
记录,以循环利用空间。这就要求从节点必须及时拉取和应用Oplog
记录,否则可能会因为Oplog
记录被覆盖而导致数据同步不完整。