movePrimary

在本页面

db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } )

例如,以下命令将主分片从test移到shard0001

db.adminCommand( { movePrimary : "test", to : "shard00 01" } )

命令返回时,数据库的主要分片位置已切换到指定的分片。要完全停用一个碎片,请使用removeShard命令。

movePrimary是仅对mongos个实例可用的 Management 命令。

Warning

在启动movePrimary之后,请勿对该数据库中任何未分片的集合执行任何读或写操作,直到命令完成。在迁移期间针对这些集合发出的读取或写入操作可能会导致意外行为,包括迁移操作的潜在失败或数据丢失。

Considerations

在维护窗口中发出 movePrimary

movePrimary可能需要大量时间才能完成,具体取决于数据库的大小和诸如网络运行状况或计算机资源之类的因素。迁移期间针对数据库发出的读取或写入操作可能导致意外行为,包括迁移操作的潜在失败或数据丢失。

考虑安排一个维护时段,在此期间应用程序停止对集群的所有读取和写入。在计划内的停机期间发出movePrimary可以降低由于对数据库中未分片集合的读取或写入交错而导致发生未定义行为的风险。

使用 movePrimary 移动未分片的集合

Warning

如果使用movePrimary命令移动未分片的集合,则必须重新启动所有mongos实例,或在所有mongos实例上使用flushRouterConfig命令,然后再将任何数据读取或写入任何已移动的未分片的集合。此操作可确保mongos知道这些集合的新分片。

如果使用movePrimary之后没有更新mongos实例的元数据缓存,则mongos可能会丢失读取数据,并且可能不会将数据写入正确的分片。要恢复,您必须手动进行干预。

命名空间冲突阻止迁移

如果目标分片包含有冲突的集合名称空间,则movePrimary失败。例如:

目标分片必须重建索引

当目标分片成为主分片时,必须在前台重建其索引。收集在索引构建时锁定,从而防止在索引完成之前进行读写操作。根据每个集合的索引数和要索引的数据量,这可能需要大量时间。

有关索引构建过程的更多信息,请参见填充集合上的索引构建操作

Additional Information

有关完整过程,请参见从现有分片群集中删除分片

首页