Docs 菜单

Docs 主页开发应用程序MongoDB Manual

基于副本集构建的滚动索引

在此页面上

  • 考虑因素
  • 先决条件
  • 步骤

索引构建可能会影响副本集性能。默认,MongoDB 会在所有承载数据的副本集节点上同时构建索引。对于不能容忍因索引构建而导致性能下降的工作负载,请考虑使用以下过程以滚动方式构建索引。

滚动索引构建一次最多占用一个副本集节点(始于从节点),并在该节点上独立构建索引。滚动索引构建需要至少一次副本集选举。

要通过以下过程创建唯一索引,必须在此过程中停止对集合的所有写入。

如果您在执行步骤的过程中无法停止所有对集合的写入操作,请不要使用本页所列的步骤。相反,请在副本集的主节点上使用 db.collection.createIndex() 来为集合构建唯一索引。

确保您的 oplog 足够大,以允许索引或重新索引操作完成,而不会落后太远而无法赶上。有关更多信息,请参阅 oplog 大小调整文档。

用于构建唯一索引

要通过以下过程创建唯一索引,必须在索引构建期间停止对集合的所有写入。否则,副本集节点之间可能会获得不一致的数据。

警告

如果无法停止对集合的所有写入,请勿使用以下步骤创建唯一索引。

重要

以滚动方式构建索引的以下过程会应用于副本集部署,而不是分片集群。有关针对分片群集的过程,请参阅针对分片集群的滚动索引构建

停止与从节点关联的 mongod 进程。执行以下配置更新后重新启动:

[1](12)通过在不同端口上运行 mongod 可以确保在构建索引时,副本集的其他节点及所有客户端不会联系该节点。

直接连接到在新端口上独立运行的 mongod 实例,并为该实例创建新索引。

例如,将 mongosh连接到实例,并使用createIndex()records集合的username字段上创建升序索引:

db.records.createIndex( { username: 1 } )

索引构建完成后,关闭 mongod 实例。撤消以独立节点身份启动时所做的配置更改,以恢复其原始配置,并以副本集节点身份重新启动。

重要

请务必删除 disableLogicalSessionCacheRefresh 参数。

例如,要重新启动副本集节点:

允许复制赶上此节点。

一旦该节点赶上副本集中的其他节点,请一次对一个剩余从节点重复该过程:

  1. A. 停止一个从节点并重启为独立实例

  2. B. 构建索引

  3. C. 以副本集节点身份重新启动程序 mongod

当所有从节点均有新索引时,退出主节点,使用上述过程将其重启为独立实例,然后构建前一个主节点的索引:

  1. 使用 中的rs.stepDown() mongosh方法降级主节点。成功降级后,当前主节点将成为从节点,并且副本集成员会选举新的主节点。

  2. A. 停止一个从节点并重启为独立实例

  3. B. 构建索引

  4. C. 以副本集节点身份重新启动程序 mongod

← 已填充集合上的索引构建