面试题答案
一键面试- MongoDB副本集数据同步机制:
- MongoDB副本集通过 oplog(操作日志)来保证数据一致性。主节点(Primary)将所有写操作记录到 oplog 中,从节点(Secondary)定期从主节点拉取 oplog 并应用这些操作,从而保持与主节点数据同步。
- 故障成员恢复后的处理:
- 自动同步:
- 当故障成员恢复后,它会自动尝试与当前主节点进行同步。它会从主节点获取自己缺失的 oplog 部分。
- 例如,如果故障期间主节点有数据写入,生成了新的 oplog 记录,恢复的节点会根据自己最后已知的 oplog 位置,请求主节点从该位置之后的 oplog 记录。
- 恢复节点获取到 oplog 后,会按顺序应用这些操作,就像主节点执行写操作时一样,从而使自身数据与主节点保持一致。
- 手动干预(特殊情况):
- 步骤一:确认节点状态
- 可以使用
rs.status()
命令查看副本集的状态,确认恢复节点的状态。如果恢复节点长时间处于RECOVERING
状态,可能存在同步问题。
- 可以使用
- 步骤二:强制重新同步
- 如果自动同步出现问题,可以考虑强制该节点重新同步。首先将该节点从副本集中移除,使用
rs.remove("hostname:port")
命令(将hostname:port
替换为实际故障恢复节点的地址和端口)。 - 然后将该节点重新加入副本集,使用
rs.add("hostname:port")
命令。重新加入后,节点会重新进行完整的数据同步,从主节点获取全部数据(而不是仅同步故障期间缺失的部分),这可以确保数据一致性。不过这种方式可能在数据量较大时花费较长时间。
- 如果自动同步出现问题,可以考虑强制该节点重新同步。首先将该节点从副本集中移除,使用
- 步骤一:确认节点状态
- 自动同步: