将单节点转为复制集¶
On this page
本文描述了如何将一个 standalone mongod 实例转换为一个由三个节点组成的复制集中的一员。我们通常用单节点实例来做测试或开发,在生产环境中使用复制集。关于如何部署单节点实例,参见 installation tutorials 。
不使用已有节点来部署复制集请参考 部署复制集 。
步骤¶
关闭 standalone mongod 实例。
重启实例,并使用 --replSet 参数来指定复制集的名字。
举个例子,下列的命令就会将单节点实例加入名为 rs0 的复制集中。下列命令使用了单节点实例的数据库目录 /srv/mongodb/db0 :
mongod --port 27017 --dbpath /srv/mongodb/db0 --replSet rs0
如果我们应用程序将连接不止一个复制集,那么每个复制集都应该有不同的名字。一些驱动以复制集名字来建立连接。
连接到 mongod 实例。
使用 rs.initiate() 来初始化复制集:
rs.initiate()
复制集配置完成。
我们可以使用 rs.conf() 命令来查看复制集参数。可以使用 rs.status() 来查看复制集状态。
复制集扩容¶
通过下列操作来为复制集新增节点:
在两个不同的系统中,启动2个新的单节点 mongod 实例。关于如何启动单节点实例请参见 installation tutorial (根据自己的操作系统查看)。
连接到一个 mongod 实例(之前的单节点实例),执行下列的命令将每个新节点加入复制集中:
rs.add("<hostname><:port>")
将 <hostname> 和 <port> 换为需要加入到复制集中的节点的信息。关于如何为复制集新增节点请参考 为复制集新增节点 。
分片集群中的注意事项¶
如果新的复制集是 sharded cluster 中的一部分,通过如下命令来修改 config database 中的分片主机信息:
连接到分片集群中的 mongos 实例,并执行如下命令:
db.getSiblingDB("config").shards.save( {_id: "<name>", host: "<replica-set>/<member,><member,><...>" } )
将 <name> 换为分片名。将 <replica-set> 换为复制集名。 将 <member,><member,><> 换为复制集的节点信息。
Restart all mongos instances. If possible, restart all components of the replica sets (i.e., all mongos and all shard mongod instances).