OPTIONS
翻译或纠错本页面

部署复制集

本教程描述了如何用3台已有的 mongod 实例来部署一个由三个节点组成的 复制集

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

概述

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

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

要求

在生产环境的部署中,我们应该尽可能将复制集中得节点置于不同的机器上。当使用虚拟机的时候,我们应该将 mongod 实例置于拥有冗余电源和冗余网络的机器上。

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

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

部署复制集的注意事项

架构

在生产环境中,我们应该将每个节点部署在独立的机器上,并使用标准的MongoDB端口 27017 。使用 bind_ip 参数来限制访问MongoDB的应用程序的地址。

若使用了异地分布式架构的复制集,请确保多数 mongod 实例节点位于主数据中心中。

参见 复制集架构 以获得更多信息。

连通性

确保各个节点之间可以正常通讯,且各个客户端都处于安全的可信的网络环境中。可以考虑以下事项:

  • 建立虚拟的专用网络。确保各个节点之间的流量是在本地网络范围内路由的。(Establish a virtual private network. Ensure that your network topology routes all traffic between members within a single site over the local area network.)

  • 配置连接限制来防止未知的客户端连接到复制集。

  • 配置网络设置和防火墙规则来对将MongoDB的端口仅开放给应用程序,来让应用程序发的进出数据包可以与MongoDB正常交流。

最后请确保复制集各节点可以互相通过DNS或是主机名解析。我们需要配置DNS域名或是设置 /etc/hosts 文件来配置。

配置

在启动的时候指定存储在 /etc/mongodb.conf 或是其他地方中的 配置文件 。并在部署MongoDB之前建立MongoDB数据文件夹。

参见 Configuration File Options 以获得更多启动参数配置信息。

详细步骤

1

将复制集中的每个节点以适当的配置参数启动。

在每个节点上启动 mongod 并通过制定 replSet 参数来指定其复制集名,并可以指定其他需要的参数。参见 Replication Options 以获得其他所需复制参数。

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

下面的例子就指定了复制集的名字通过 --replSet 参数:

mongod --replSet "rs0"

下面的例子通过配置文件来指定复制集的名字:

mongod --config $HOME/.mongodb/config

在生产环境中,我们可以通过配置 control script 来进行上述过程。Control scripts将不在本文档中进行介绍。

2

打开 mongo 界面并连接到复制集的某个节点。

举个例子,连接到启动在本地的,且端口为 27017mongod 实例:

mongo
3

初始化复制集。

使用 rs.initiate() 命令:

rs.initiate()

MongoDB将初始化一个由当前节点构成、拥有默认配置的复制集。

4

指定复制集初始化参数。

使用 rs.conf() 来查看 复制集配置对象

rs.conf()

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

{
   "_id" : "rs0",
   "version" : 1,
   "members" : [
      {
         "_id" : 1,
         "host" : "mongodb0.example.net:27017"
      }
   ]
}
5

将其他的节点加入复制集。

通过 rs.add() 来将剩下的节点加入复制集。

下述例子是添加两个节点:

rs.add("mongodb1.example.net")
rs.add("mongodb2.example.net")

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

6

检查复制集的状态。

通过 rs.status() 命令:

rs.status()