MST

星途 面试题库

面试题:MongoDB副本集成员故障后的数据一致性恢复

假设MongoDB副本集的一个成员发生故障,且在故障期间有数据写入,在恢复该成员时,如何确保恢复后副本集的数据一致性?描述具体的恢复流程和涉及的关键操作。
11.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试
  1. 确认故障成员
    • 通过MongoDB的管理工具(如mongo shell连接到副本集的主节点),使用rs.status()命令查看副本集状态,确定发生故障的成员。
  2. 数据同步准备
    • 在故障成员修复并重新启动MongoDB服务后,它会尝试自动与副本集中的其他成员进行同步。
    • 如果故障期间数据写入量较大,可能需要检查磁盘空间是否足够容纳同步的数据。
  3. 强制同步(如有必要)
    • 如果故障成员未能自动成功同步数据,可以使用rs.syncFrom命令手动指定从哪个成员进行同步。例如,连接到故障成员的mongo shell,执行rs.syncFrom("<healthy_member_host:port>"),这里<healthy_member_host:port>是副本集中健康成员的主机和端口。
  4. 验证数据一致性
    • 同步完成后,再次使用rs.status()命令检查副本集状态,确保故障成员的stateStrSECONDARY且与其他成员的optime等关键同步指标一致。
    • 可以通过对副本集所有成员执行相同的读操作(如查询特定集合中的文档数量等),验证数据是否一致。如果数据不一致,可能需要进一步排查原因,如网络问题、权限问题等。
  5. 提升为正常副本集成员(可选,对于从节点故障)
    • 如果故障成员是从节点,在确认数据一致性后,它会自动恢复为正常的副本集从节点状态,参与数据复制。如果故障成员是主节点,且在故障期间副本集进行了选举产生了新主节点,在原主节点恢复并同步数据后,它会成为从节点。