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

将自管理分片集群转换为副本集

本页面内容

  • 开始之前
  • 将具有单个分片的集群转换为副本集
  • 将分片集群转换为副本集

本教程描述了将分片集群转换为非分片副本集的过程。要将副本集转换为分片集群,请参阅将自管理副本集转换为分片集群。有关分片集群的更多信息,请参阅分片文档。

从 MongoDB 8.0 版本开始,您可以使用 directShardOperations 角色,以执行需要直接对分片执行命令的维护操作。

警告

使用 directShardOperations 角色运行命令可能导致您的集群无法正常工作,并可能导致数据损坏。仅在维护目的或MongoDB支持指导下使用 directShardOperations 角色。完成维护操作后,停止使用 directShardOperations 角色。

对于只有一个分片的 分片集群,该分片包含完整的数据集。使用以下步骤将该集群转换为非分片 副本集

  1. 重新配置应用程序以连接到托管单个分片的主副本集成员,该系统将成为新的副本集。

  2. 从您的 --shardsvr 选项中移除 mongod

    提示

    更改 --shardsvr 选项将改变 mongod 监听传入连接的端口。

单分片集群现在是一个非分片的 副本集,将接受数据集上的读写操作。

您现在可以退役剩余的分片基础设施。

使用以下步骤将一个具有多个分片的 分片集群 转换为全新的 副本集

  1. 在运行中的 分片集群 上,除了分片集群外,还要部署一个新的副本集。副本集必须具有足够的容量来存储所有当前分片的所有数据文件。在数据传输完成之前,不要配置应用程序连接到新的副本集。

  2. 停止对 分片集群 的所有写入。您可以重新配置应用程序或停止所有 mongos 实例。如果您停止所有 mongos 实例,应用程序将无法从数据库中读取。如果您停止所有 mongos 实例,为数据迁移过程在应用程序无法访问的临时 mongos 实例上启动。

  3. 使用 mongodump 和 mongorestore 将数据从 mongos 实例迁移到新的 副本集

    注意

    并非所有数据库上的所有集合都必须分片。不要仅迁移分片集合。确保所有数据库和所有集合都正确迁移。

  4. 重新配置应用程序以使用非分片的 副本集 而不是 mongos 实例。

    在将分片集群转换为副本集后,更新应用程序使用的连接字符串以指向副本集的连接字符串。然后,重新启动您的应用程序。

应用程序现在将使用非分片的 副本集 进行读写。您现在可以退役剩余的未使用分片集群基础设施。

返回

备份集群元数据