文档菜单
文档首页
/
MongoDB 手册
/ / /

移动主分片

在本页

  • 兼容性
  • 注意事项
  • 更多信息
movePrimary

分片集群, movePrimary重新分配包含数据库中所有未分片集合的主分片。首先更改集群元数据中的主分片,然后将所有未分片集合迁移到指定的分片。使用以下格式的命令

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

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

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

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

movePrimary是仅适用于mongos实例的管理命令。

注意

启动 movePrimary 命令后,请勿在该数据库中对任何非分片集合执行任何读或写操作,直到命令完成。在迁移过程中对这些集合执行的读或写操作可能导致意外行为,包括迁移操作失败或数据丢失。

此命令在以下环境中部署的部署中可用

  • MongoDB Atlas:云中 MongoDB 部署的全托管服务

重要

此命令不支持在无服务器实例上。有关更多信息,请参阅 不支持命令。

mongosmovePrimary 使用 "majority" 写关注。

movePrimary 完成可能需要很长时间,具体取决于数据库的大小以及网络健康或机器资源等因素。在迁移期间对数据库执行读写操作可能会导致意外行为,包括迁移操作失败或数据丢失。

考虑在应用程序停止对集群进行所有读写操作期间安排维护窗口。在计划停机期间执行 movePrimary 可以减轻由于对数据库中未分片的集合进行交错读写而导致遇到未定义行为的风险。

movePrimary 在目标分片包含冲突的集合命名空间时失败。例如

  1. 管理员发出 movePrimary 以更改 hr 数据库的主分片。

  2. movePrimary 正在移动该集合时,用户或应用程序对 hr 中的未分片集合发出写操作。写操作在原始主分片创建了该集合。

  3. 管理员随后发出 movePrimary 以恢复 hr 数据库的原始主分片。

  4. movePrimary 因交错写操作留下的冲突命名空间而失败。

作为movePrimary操作的一部分,目标分片必须在成为主分片后重建迁移集合的索引。这可能需要根据每个集合的索引数量和要索引的数据量而显著的时间。

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

从MongoDB 8.0开始,movePrimary不会使具有change streams的集合无效。更改流可以在集合移动到新分片后继续从集合中读取事件。

在早期版本的MongoDB中,movePrimary会使集合更改流无效,更改流无法从集合中读取事件。

在所有MongoDB版本中,movePrimary会更新已移动的非分片集合的UUID

请参阅从分片集群中移除分片以获取完整步骤。

返回

移动集合