将自管理分片集群转换为副本集
本教程描述了将分片集群转换为非分片副本集的过程。要将副本集转换为分片集群,请参阅将自管理副本集转换为分片集群。有关分片集群的更多信息,请参阅分片文档。
开始之前
从 MongoDB 8.0 版本开始,您可以使用 directShardOperations
角色,以执行需要直接对分片执行命令的维护操作。
警告
使用 directShardOperations
角色运行命令可能导致您的集群无法正常工作,并可能导致数据损坏。仅在维护目的或MongoDB支持指导下使用 directShardOperations
角色。完成维护操作后,停止使用 directShardOperations
角色。
将单分片集群转换为副本集
对于只有一个分片的 分片集群,该分片包含完整的数据集。使用以下步骤将该集群转换为非分片 副本集:
重新配置应用程序以连接到托管单个分片的主副本集成员,该系统将成为新的副本集。
从您的
--shardsvr
选项中移除mongod
。提示
更改
--shardsvr
选项将改变mongod
监听传入连接的端口。
单分片集群现在是一个非分片的 副本集,将接受数据集上的读写操作。
您现在可以退役剩余的分片基础设施。
将分片集群转换为副本集
使用以下步骤将一个具有多个分片的 分片集群 转换为全新的 副本集。
在运行中的 分片集群 上,除了分片集群外,还要部署一个新的副本集。副本集必须具有足够的容量来存储所有当前分片的所有数据文件。在数据传输完成之前,不要配置应用程序连接到新的副本集。
停止对 分片集群 的所有写入。您可以重新配置应用程序或停止所有
mongos
实例。如果您停止所有mongos
实例,应用程序将无法从数据库中读取。如果您停止所有mongos
实例,为数据迁移过程在应用程序无法访问的临时mongos
实例上启动。使用 mongodump 和 mongorestore 将数据从
mongos
实例迁移到新的 副本集。注意
并非所有数据库上的所有集合都必须分片。不要仅迁移分片集合。确保所有数据库和所有集合都正确迁移。
重新配置应用程序以使用非分片的 副本集 而不是
mongos
实例。在将分片集群转换为副本集后,更新应用程序使用的连接字符串以指向副本集的连接字符串。然后,重新启动您的应用程序。
应用程序现在将使用非分片的 副本集 进行读写。您现在可以退役剩余的未使用分片集群基础设施。