面试题答案
一键面试故障检测
- 监控系统告警:依赖云平台提供的监控工具,如日志监控、性能指标监控等,及时发现MongoDB副本集主节点故障告警以及云存储服务中断告警。
- 手动检测:通过登录副本集的各个节点,使用
rs.status()
命令查看副本集状态,若主节点状态异常(如处于DOWN
状态),且部分数据查询结果与预期不符,可确认主节点故障及数据丢失情况。同时,检查云存储服务相关配置及连接状态,确认云存储服务中断。
数据恢复策略
- 从副本节点恢复:若副本集中有最新完整数据的副本节点,可将其提升为主节点。在提升之前,确保该副本节点的数据是最新且完整的。
- 云存储数据恢复:等待云存储服务恢复后,检查云存储中的备份数据。若有完整备份,可将备份数据恢复到副本集中。
- 日志重放:MongoDB使用操作日志(oplog)记录所有写操作。若数据丢失较少,可通过重放oplog来恢复丢失的数据。
操作步骤
- 处理主节点故障
- 登录副本集成员节点,执行
rs.status()
查看状态,确定故障主节点。 - 选择一个数据相对完整且同步状态良好的副本节点,执行
rs.stepDown()
命令使当前主节点退位(若主节点故障无法执行此命令,可跳过)。 - 登录选定的副本节点,执行
rs.promote()
将其提升为主节点。
- 登录副本集成员节点,执行
- 等待云存储服务恢复
- 持续监控云存储服务状态,等待其恢复正常运行。
- 恢复数据
- 从云存储备份恢复:
- 确认云存储服务恢复后,获取最新的备份数据。
- 停止MongoDB服务,将备份数据恢复到指定目录(根据云存储备份恢复工具及MongoDB数据目录配置操作)。
- 启动MongoDB服务,副本集将自动同步数据。
- 重放oplog:
- 找到包含丢失数据操作的oplog区间。
- 使用
mongoreplay
工具(或手动重放oplog操作),按照oplog记录的操作顺序在副本集上重新执行,以恢复丢失的数据。
- 从云存储备份恢复:
- 验证数据一致性
- 在副本集恢复完成后,使用数据验证工具(如
db.validateCollection()
)对每个集合进行数据一致性验证。 - 对比恢复前后的关键数据指标,如文档数量、数据总和等,确保数据恢复正确且一致。
- 在副本集恢复完成后,使用数据验证工具(如