OPTIONS
翻译或纠错本页面

部署一个用于测试和开发的复制集

本文档讲述了如何部署一个用于开发和测试的复制集环境。参见 部署复制集 以获得生产环节的部署教程。

本教程讲述了如何用3个已有 mongod 的实例来建立一个由3个节点组成的 复制集

如果希望用一个Mongodb实例来部署复制集请参见 将单节点转为复制集 。参见 复制复制集架构 以获得更多有关复制集的信息。

概述

由三个节点组成的 复制集 为网络故障或是其他的系统故障提供了足够的冗余。该复制集也有足够的分布式读操作的能力。复制集应该保持奇数个节点,这也就保证了 选举 可以正常的进行。参见 复制集概览 以获得更多有关复制集设计的信息。

我们通常先从一个将会成为复制集成员的 mongod 实例开始来配置复制集。然后为复制集新增实例。

要求

在测试和开发环境中,我们的 mongod 实例可以在本地也可以在虚拟机上。

在我们部署复制集之前,我们必须在 复制集 的每个机器上安装MongoDB实例。如果我们还没安装MongoDB,请参考 安装指南

在初始化复制集之前,我们应该检测我们的网络配置,保证各节点之间通讯正常。为了成功的完成复制集的部署,每个节点都必须能够与其他节点进行功勋。关于如何确认各个节点之间的通讯情况,请参见 Test Connections Between all Members

部署复制集的注意事项

复制集命名

重要

下面的指令仅用于测试或开发环境中。

下列例子为建立一个名为 rs0 的复制集。

如果我们的应用程序需要连接多个复制集,那么每个复制集需要有不同的名字。一些驱动将复制集连接按复制集名来分组。

我们需先启动名为 rs0 的复制集中的3个 mongod 实例。

详细步骤

  1. 通过下列方式为每个节点建立必要的数据文件夹:

    mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2
    

    将建立名为 “rs0-0”, “rs0-1”, 和 “rs0-2” 的文件夹,每个文件夹中将存储数据文件。

  2. 通过下述命令来启动 mongod 实例:

    第一个节点:

    mongod --port 27017 --dbpath /srv/mongodb/rs0-0 --replSet rs0 --smallfiles --oplogSize 128
    

    第二个节点:

    mongod --port 27018 --dbpath /srv/mongodb/rs0-1 --replSet rs0 --smallfiles --oplogSize 128
    

    第三个节点:

    mongod --port 27019 --dbpath /srv/mongodb/rs0-2 --replSet rs0 --smallfiles --oplogSize 128
    

    这些命令将启动复制集 rs0 中的各个节点,每个节点通过有着不同的端口,并通过 --dbpath 参数来设置不同数据文件夹。如果我们已经用了默认端口,其余的节点应该用其他的端口。

    The --smallfiles and --oplogSize settings reduce the disk space that each mongod instance uses. This is ideal for testing and development deployments as it prevents overloading your machine. For more information on these and other configuration options, see Configuration File Options.

  3. 我们需要指明所需连接的端口,来通过 mongo 命令连接到某个 mongod 实例。为了简单方便,我们可以通过下列命令来连接到第一个实例:

    mongo --port 27017
    
  4. mongo 中使用 rs.initiate() 来初始化复制集。我们可以通过下列方式来设定复制集配置对象:

    rsconf = {
               _id: "rs0",
               members: [
                          {
                           _id: 0,
                           host: "<hostname>:27017"
                          }
                        ]
             }
    

    <hostname> 替换为我们的主机名,通过``rsconf`` 文件来 rs.initiate()

    rs.initiate( rsconf )
    
  5. 通过下述命令可以展示现有的:doc:复制集配置 </reference/replica-configuration>

    rs.conf()
    

    复制集配置对象大致如下:

    {
       "_id" : "rs0",
       "version" : 4,
       "members" : [
          {
             "_id" : 1,
             "host" : "localhost:27017"
          }
       ]
    }
    
  6. 使用 mongo 连接到 primary,并用过 rs.add() 命令来添加第二个和第三个 mongod 实例到复制集中。 将 <hostname> 替换为我们的主机名:

    rs.add("<hostname>:27018")
    rs.add("<hostname>:27019")
    

    当完成后,一个完整的复制集便完成了。这个新的复制集将选举出一个 主节点

通过 rs.status() 命令来检查复制集的状态。

参见

下述为这些函数的详细文档:

我们也可能会考虑使用 simple setup script 来自动配置复制集。

关于Mongodb的语法请参考 Replica Set Read and Write Semantics