参考 > 指标 > 在填充的集合上建立索引 > 在副本集上建立索引
为了最大程度地减少建立索引对副本集部署的影响,请使用以下过程以滚动方式建立索引。有关在分片群集上建立索引的信息,请参阅 在分片群集上建立索引。
以下用于副本集部署的过程确实一次使一个成员脱离副本集。但是,此过程一次只会影响集合中的一个成员,而不会同时影响所有 次要成员。
要使用以下过程创建唯一索引,必须在此过程中停止对集合的所有写操作。
如果在此过程中无法停止对集合的所有写操作,请不要使用此页面上的过程。相反,通过db.collection.createIndex()
在副本集的主数据库上发布,可以在集合上构建唯一索引。
要使用以下过程创建唯一索引,必须在索引构建过程中停止对集合的所有写操作。否则,最终可能导致整个副本集成员的数据不一致。
警告
如果无法停止对集合的所有写操作,请不要使用以下过程创建唯一索引。
重要
以下以滚动方式构建索引的过程适用于副本集部署,而不适用于分片群集。有关具有副本集分片的分片群集的过程,请参阅 在分片群集上构建索引。
停止mongod
与辅助服务器关联的进程。进行以下配置更新后,重新启动:
如果您使用的是配置文件,请进行以下配置更新:
replication.replSetName
选项。net.port
改为其他端口。[1]
记下原始端口设置作为注释。disableLogicalSessionCacheRefresh
为
。true
setParameter
例如,副本集成员的更新配置文件将包含类似于以下示例的内容:
其他设置(例如storage.dbPath
等)保持不变。
并重新启动:
[1] | (1,2)通过运行mongod 在不同的端口上,可以确保当你正在构建的指数副本集的其他成员和所有客户端将无法联系这位会员。 |
直接连接到在mongod
新端口上独立运行的实例,并为此实例创建新索引。
例如,将mongo
外壳连接到实例,然后使用createIndex()
来username
在records
集合的字段上创建升序索引:
mongod
作为副本集成员¶索引构建完成后,关闭mongod
实例。撤消以独立版本启动时所做的配置更改,以返回其原始配置并以副本集的成员身份重新启动。
重要
确保删除disableLogicalSessionCacheRefresh
参数。
例如,重新启动副本集成员:
如果您使用的是配置文件:
replication.replSetName
。disableLogicalSessionCacheRefresh
在该setParameter
部分中删除参数。例如:
其他设置(例如storage.dbPath
等)保持不变。
并重新启动:
允许复制赶上该成员。
当所有辅助节点都具有新索引时,请降级主节点,然后使用上述过程以独立方式重新启动它,然后在先前的主节点上建立索引:
rs.stepDown()
方法mongo
降低主数据库的性能。成功降级后,当前的主节点将成为辅助节点,副本集成员将选择新的主节点。