部署复制集¶
本教程描述了如何用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 以获得更多启动参数配置信息。
详细步骤¶
将复制集中的每个节点以适当的配置参数启动。¶
在每个节点上启动 mongod 并通过制定 replSet 参数来指定其复制集名,并可以指定其他需要的参数。参见 Replication Options 以获得其他所需复制参数。
如果我们的应用程序需要连接多个复制集,那么每个复制集需要有不同的名字。一些驱动将复制集连接按复制集名来分组。
下面的例子就指定了复制集的名字通过 --replSet 参数:
mongod --replSet "rs0"
下面的例子通过配置文件来指定复制集的名字:
mongod --config $HOME/.mongodb/config
在生产环境中,我们可以通过配置 control script 来进行上述过程。Control scripts将不在本文档中进行介绍。