将自管理分片集群转换为副本集
本教程介绍进程分分片集群转换为非分片副本集的过程。 将副本集转换为分片分片集群将自管理副本集转换为分片集群。 有关分分片的集群的更多信息,请参阅分片文档。
将具有单个分片的集群转换为副本集
对于只有一个分片的分片集群,该分片包含完整数据集。使用以下步骤将该集群转换为非分片副本集:
重新配置应用程序以连接到托管单个分片的副本集的主节点,该系统将成为新的副本集。
mongod
从--shardsvr
中删除 选项。提示
更改
--shardsvr
选项将会更改mongod
侦听传入连接的端口。
单分片集群现在是一个非分片副本集,将接受针对数据集的读写操作。
您现在可以停用剩余的分片基础设施。
将分片集群转换为副本集
在分片集群运行时,除了分片集群之外,还部署一个新的副本集。副本集的容量必须足以容纳当前所有分片的所有数据文件。在数据传输完成之前,不要将应用程序配置为连接到新的副本集。
停止对分片集群的所有写入。您可以重新配置应用程序或停止所有
mongos
实例。如停止所有mongos
实例,应用程序将无法读取数据库。如果停止所有mongos
实例,则在一个应用程序无法访问的临时mongos
实例上启动,以执行数据迁移步骤。使用 mongodump 和 mongorestore 将数据从
mongos
实例迁移到新副本集。注意
并非所有数据库上的所有集合都必须进行分片。不要仅迁移分片集合。确保所有数据库和所有集合均正确迁移。
将应用程序重新配置为使用非分片副本集,而不是
mongos
实例。将分片集群转换为副本集后,将应用程序使用的连接字符串更新为副本集的连接字符串。然后,重新启动您的应用程序。
应用程序现在将使用未分片的副本集进行读取和写入。您现在可以停用其余未使用的分片集群基础架构。