此过程描述了在开发或测试环境中部署副本集。对于生产部署,请参考“ 部署副本集”教程。
本教程介绍如何从禁用访问控制的三个现有实例
创建一个三成员副本集。mongod
要部署启用了访问控制的副本集,请 参阅使用密钥文件身份验证部署副本集。如果您希望从单个MongoDB实例部署副本集,请参阅“ 将独立副本转换为副本集”。有关副本集部署的详细信息,请参阅复制和 副本集部署体系结构文档。
三个成员副本集提供足够的冗余性,以承受大多数网络分区和其他系统故障。这些集合对于许多分布式读取操作也具有足够的容量。副本集的成员数应始终为奇数。这确保了选举将顺利进行。有关设计副本集的更多信息,请参见复制概述。
对于测试和开发系统,您可以mongod
在本地系统上或虚拟实例中运行实例。
在部署副本集之前,必须在将成为副本集一部分的每个系统上安装MongoDB 。如果尚未安装MongoDB,请参阅安装教程。
每个成员都必须能够连接到其他每个成员。有关如何检查连接的说明,请参阅 测试所有成员之间的连接。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
从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
:
在此测试部署中,三个成员在同一台计算机上运行。
重要
这些说明仅应用于测试或开发部署。
此过程中的示例创建一个名为的新副本集rs0
。
如果您的应用程序连接到多个副本集,则每个副本集应具有不同的名称。某些驱动程序通过副本集名称对副本集连接进行分组。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
通过发出类似于以下内容的命令,为每个成员创建必要的数据目录:
这将创建名为“ rs0-0”,“ rs0-1”和“ rs0-2”的目录,其中将包含实例的数据库文件。
mongod
通过发出以下命令,在自己的外壳窗口中启动实例:
第一成员:
第二名成员:
第三名成员:
这将使每个实例作为名为的副本集的成员开始,每个副本集
rs0
都在不同的端口上运行,并使用该--dbpath
设置指定数据目录的路径。如果您已经在使用建议的端口,请选择其他端口。
这些实例同时绑定到主机的localhost和ip地址。
该--oplogSize
设置减少了每个mongod
实例使用的磁盘空间。[1]
这是测试和开发部署的理想选择,因为它可以防止计算机过载。有关此配置选项和其他配置选项的更多信息,请参见“ 配置文件选项”。
mongod
通过mongo
外壳连接到您的一个实例
。您需要通过指定其端口号来指示哪个实例。为了简单明了,您可能希望选择第一个,如以下命令所示;
在mongo
外壳程序中,用于rs.initiate()
启动副本集。您可以在mongo
shell环境中创建副本集配置对象,如以下示例所示:
替换<hostname>
为系统的主机名,然后将该rsconf
文件传递给rs.initiate()
以下内容:
通过发出以下命令显示当前副本配置:
副本集配置对象类似于以下内容:
随时通过该rs.status()
操作检查副本集的状态
。
[1] | 从MongoDB 4.0开始,操作日志可以超过其配置的大小限制,以避免删除。majority commit point |