翻译或纠错本页面

将单节点转为复制集

On this page

本文描述了如何将一个 standalone mongod 实例转换为一个由三个节点组成的复制集中的一员。我们通常用单节点实例来做测试或开发,在生产环境中使用复制集。关于如何部署单节点实例,参见 installation tutorials

不使用已有节点来部署复制集请参考 部署复制集

步骤

  1. 关闭 standalone mongod 实例。

  2. 重启实例,并使用 --replSet 参数来指定复制集的名字。

    举个例子,下列的命令就会将单节点实例加入名为 rs0 的复制集中。下列命令使用了单节点实例的数据库目录 /srv/mongodb/db0

    mongod --port 27017 --dbpath /srv/mongodb/db0 --replSet rs0
    

    如果我们应用程序将连接不止一个复制集,那么每个复制集都应该有不同的名字。一些驱动以复制集名字来建立连接。

    关于配置参数的更多信息,请参见 配置文件选项mongod 手册界面。

  3. 连接到 mongod 实例。

  4. 使用 rs.initiate() 来初始化复制集:

    rs.initiate()
    

    复制集配置完成。

    我们可以使用 rs.conf() 命令来查看复制集参数。可以使用 rs.status() 来查看复制集状态。

复制集扩容

通过下列操作来为复制集新增节点:

  1. 在两个不同的系统中,启动2个新的单节点 mongod 实例。关于如何启动单节点实例请参见 installation tutorial (根据自己的操作系统查看)。

  2. 连接到一个 mongod 实例(之前的单节点实例),执行下列的命令将每个新节点加入复制集中:

    rs.add("<hostname><:port>")
    

    <hostname><port> 换为需要加入到复制集中的节点的信息。关于如何为复制集新增节点请参考 为复制集新增节点

分片集群中的注意事项

如果新的复制集是 sharded cluster 中的一部分,通过如下命令来修改 config database 中的分片主机信息:

  1. 连接到分片集群中的 mongos 实例,并执行如下命令:

    db.getSiblingDB("config").shards.save( {_id: "<name>", host: "<replica-set>/<member,><member,><...>" } )
    

    <name> 换为分片名。将 <replica-set> 换为复制集名。 将 <member,><member,><> 换为复制集的节点信息。

  2. Restart all mongos instances. If possible, restart all components of the replica sets (i.e., all mongos and all shard mongod instances).