在本页面
本教程介绍如何从禁用访问控制的三个现有实例
创建一个三成员副本集。mongod
要部署启用了访问控制的副本集,请 参阅使用密钥文件身份验证部署副本集。如果您希望从单个MongoDB实例部署副本集,请参阅“ 将独立副本转换为副本集”。有关副本集部署的详细信息,请参阅复制和 副本集部署体系结构文档。
三个成员副本集提供足够的冗余性,以承受大多数网络分区和其他系统故障。这些集合对于许多分布式读取操作也具有足够的容量。副本集的成员数应始终为奇数。这确保了选举将顺利进行。有关设计副本集的更多信息,请参见复制概述。
对于生产部署,应通过将mongod
实例托管在单独的计算机上来尽可能保持成员之间的隔离。将虚拟机用于生产部署时,应将每个mongod
实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上。
在部署副本集之前,必须在将成为副本集一部分的每个系统上安装MongoDB 。如果尚未安装MongoDB,请参阅安装教程。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
使用该bind_ip
选项可确保MongoDB在配置的地址上侦听来自应用程序的连接。
从MongoDB 3.6,MongoDB二进制文件mongod
和开始
mongos
,默认情况下绑定到localhost。如果
为二进制net.ipv6
文件设置了
配置文件设置或--ipv6
命令行选项,则二进制文件还会绑定到本地IPv6地址。
以前,从MongoDB 2.6开始,默认情况下,只有正式的MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件才绑定到localhost。
当仅绑定到本地主机时,这些MongoDB 3.6二进制文件只能接受来自mongo
在同一台计算机上运行的客户端(包括Shell,副本集中部署的其他成员和分片群集)中的连接。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖并绑定到其他IP地址,可以使用
net.bindIp
配置文件设置或
--bind_ip
命令行选项来指定主机名或IP地址的列表。
例如,以下mongod
实例绑定到localhost和My-Example-Associated-Hostname
与ip地址关联的主机名198.51.100.1
:
为了连接到该实例,远程客户端必须指定主机名或其关联的IP地址198.51.100.1
:
确保网络流量可以在集合的所有成员与网络中的所有客户端之间安全地传递。
考虑以下:
确保可以通过可解析的DNS或主机名访问副本集的每个成员。您应该适当地配置DNS名称或设置系统/etc/hosts
文件以反映此配置。
每个成员都必须能够连接到其他每个成员。有关如何检查连接的说明,请参阅 测试所有成员之间的连接。
以下过程概述了禁用访问控制时部署副本集的步骤。
对于每个成员,mongod
使用以下设置启动实例:
设置replication.replSetName
选项为副本集名称,
如果您的应用程序连接到多个副本集,则每个副本集应具有不同的名称。某些驱动程序通过副本集名称对副本集连接进行分组。
将net.bindIp
选项设置为主机名/ ip或以逗号分隔的主机名/ ips列表,以及
根据您的部署设置任何其他设置。
在本教程中,这三个mongod
实例与以下主机相关联:
副本集成员 | 主机名 |
---|---|
会员0 | mongodb0.example.net |
成员1 | mongodb1.example.net |
成员2 | mongodb2.example.net |
以下示例通过--replSet
和--bind_ip
命令行选项指定副本集名称和ip绑定:
对于,请指定实例的主机名和/或ip地址,远程客户端(包括副本集的其他成员)可以使用该主机名和/或ip地址连接到该实例。<hostname(s)|ip address(es)>
mongod
或者,您也可以在配置文件中指定和:replica set name
ip addresses
要从mongod
配置文件开始,请使用以下--config
选项指定配置文件的路径:
在生产部署中,您可以配置一个初始化脚本 来管理此过程。初始化脚本超出了本文档的范围。
在mongo
外壳上,rs.initiate()
在副本集成员0上运行。
重要
仅在副本集的一个实例rs.initiate()
上运行。
mongod
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
MongoDB使用默认副本集配置启动副本集。
使用rs.status()
来识别副本集的主。
也可以看看