将一个集群转化为复制集¶
这篇教程描述了将 sharded cluster 转化为未分片的 replica set 的方法.将复制集转化为集群的方法,可以参见 将复制集变为使用了复制集的集群. 关于集群的更多信息,可以参见 分片.
将只有一个分片的集群转化为复制集¶
在 sharded cluster 只有一个分片的情况下,使用以下的过程将其转化为未分片的 replica set:
重新配置应用程序,将其直接连接到分片机器上.
如果分片启动时使用了 --shardsrv 选项,将其移除重启.
注意事项
Changing the --shardsrv option will change the port that mongod listens for incoming connections on.
现在单节点的集群已经可以作为复制集进行读写操作了.
你现在可以去掉集群中其他组件了.
将集群转化为复制集.¶
使用以下步骤,将拥有一个以上节点的集群转化为一个全新的复制集.
在集群运行时,参照 部署一个新复制集 部署一个新的复制集,新的复制集必须足够大以容纳集群中所有的数据,在数据转移完成之前,不要将应用连接到新的复制集上.
停止集群所有的写入,你可以重新配置应用不向集群写入数据,也可以停止所有的 mongos , 不过停止所有的mongos之后,应用也不能从集群读取数据.如果你停止了所有mongos,需要启动一个临时的mongos,这个mongos不能被应用访问到,是用来做数据迁移的.
使用 mongodump and mongorestore 将数据通过 mongos 从集群中迁移到新的复制集中.
注解
并不是所有的数据库都被分片,不要仅仅迁移分片的集合,要把所有的数据库和所有的集合都迁移完.
重新配置应用,使用未分片的复制集代替 mongos .
应用现在可以使用没有分片的复制集进行读写了,之前的集群可以退役.