暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongodb 索引构建失败与恢复

wzf0072 2024-10-22
159

mongodb 索引构建失败与恢复

主节点 mongod 上的索引构建中断


从 MongoDB 5.0 开始,如果主节点 mongod 使用 "force" : true 执行干净的 shutdown 或在索引构建期间收到 SIGTERM 信号,并且 commitQuorum 设置为默认 votingMembers,则索引构建进度将保存到磁盘。mongod 在重新启动时会自动恢复此索引构建,并从保存的检查点继续运行。在早期版本中,如果索引构建中断,就必须从头重新开始。

从节点 mongod 上的索引构建中断


从 MongoDB 5.0 开始,如果从节点 mongod 使用 "force" : true 执行干净的 shutdown 或在索引构建期间收到了 SIGTERM 信号,并且 commitQuorum 设置为默认 votingMembers,则索引构建进度将保存到磁盘。mongod 在重新启动时会自动恢复该索引构建,并从已保存的检查点继续运行。在早期版本中,如果索引构建已中断,则必须从头重新开始。

mongod 可以在恢复索引构建的同时执行启动过程。

如果以独立模式重新启动 mongod(即删除或注释掉 replication.replSetName 或省略 --replSetName),则 mongod 无法重新启动索引构建。该构建将保持暂停状态,直到手动执行 dropped

独立 mongod 上的索引构建中断


如果 mongod 在索引构建期间关闭,则索引构建作业和所有进度都将丢失。重新启动 mongod 不会重新启动索引构建。必须重新执行 createIndex() 操作,才能重新启动索引构建过程。

构建进程中的回滚


从 MongoDB 5.0 开始,如果在索引构建期间某一节点回滚到之前的状态,则会将索引构建进度保存到磁盘。如果回滚结束时仍有工作要做,mongod 则会自动恢复索引构建,并从保存的检查点继续运行。

MongoDB 可以暂停正在进行的索引构建,以执行回滚

  • 如果回滚没有撤销索引构建进度,MongoDB 会在完成回滚后重新启动索引构建作业。

  • 如果回滚操作撤销了索引构建进度,您必须在回滚完成后重新创建一个或多个索引。

分片集合的索引一致性检查


如果一个分片集合在包含集合数据块的每个分片上没有完全相同的索引(包括索引选项),则该集合的索引不一致。尽管一般操作过程中不应出现索引不一致的情况,但这种情况仍有可能发生,例如:

配置服务器主节点会定期检查分片集合的分片之间的索引不一致情况。要配置这些定期检查,请参阅 enableShardedIndexConsistencyCheck 和 shardedIndexConsistencyCheckIntervalMS

在配置服务器主节点上运行时,命令 serverStatus 返回字段 shardedIndexConsistency 以报告索引不一致的情况。

要检查分片集合是否存在不一致的索引,请参阅查找分片间不一致的索引

监控进行中的索引构建


要查看索引构建操作的状态,可以使用 mongosh 中的 db.currentOp() 方法。要过滤索引创建操作的当前操作,请参阅主动创建索引的操作,查看相关示例。

msg 字段包括了索引构建过程中当前阶段的完成百分比测量值。

查看日志中已停止和已恢复的索引构建过程


构建索引时,进度会写入 MongoDB 日志。如果索引构建已停止并恢复,则会出现包含如下字段的日志消息:

"msg":"Index build: wrote resumable state to disk",


"msg":"Found index from unfinished build",

终止正在进行的索引构建


使用 dropIndexes 命令或其 Shell 助手 dropIndex() 或 dropIndexes() 来终止正在进行的索引构建。有关更多信息,请参阅停止正在进行的索引构建

 使用 killOp 终止副本集或分片集群中正在进行的索引构建。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论