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