MST

星途 面试题库

面试题:MongoDB副本集中Oplog的作用及工作原理

请阐述MongoDB副本集中Oplog是什么,它在副本集的数据同步过程中起到怎样的作用,以及其基本的工作原理是什么?
16.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

Oplog 定义

  • Oplog(操作日志,即 Operation Log)是 MongoDB 副本集中主节点(Primary)上的一个特殊的、固定大小的集合,位于 local 数据库中。它以时间顺序记录了主节点上所有对数据产生修改的操作。

在副本集数据同步中的作用

  • 数据复制:副本集中的从节点(Secondary)通过复制主节点的 Oplog 来保持与主节点数据的一致性。从节点不断地从主节点拉取 Oplog 中的操作,并在本地应用这些操作,从而实现数据的同步。
  • 故障恢复:当主节点发生故障时,副本集中的其他节点可以通过应用 Oplog 中的操作来恢复到故障前的状态,以便选举出新的主节点并继续提供服务。

基本工作原理

  1. 主节点记录操作:当主节点上执行任何写操作(如插入、更新、删除等)时,MongoDB 会将这些操作记录到 Oplog 中。每个 Oplog 记录包含了操作的详细信息,如操作类型、操作的集合、修改的文档等。
  2. 从节点拉取 Oplog:从节点会定期轮询主节点,获取自上次同步以来主节点 Oplog 中新增加的记录。从节点通过维护一个同步点(即上次同步的最后一条 Oplog 记录的位置)来确定需要拉取哪些新的 Oplog 记录。
  3. 从节点应用操作:从节点在拉取到新的 Oplog 记录后,会按照记录的顺序在本地数据库上依次应用这些操作,从而使本地数据与主节点数据保持一致。在应用操作过程中,如果遇到错误,从节点会停止同步并记录错误信息,管理员需要手动处理这些错误以恢复同步。
  4. Oplog 循环利用:由于 Oplog 是固定大小的集合,当 Oplog 空间使用满时,MongoDB 会覆盖最早的 Oplog 记录,以循环利用空间。这就要求从节点必须及时拉取和应用 Oplog 记录,否则可能会因为 Oplog 记录被覆盖而导致数据同步不完整。