部署用于测试和开发的副本集
此过程介绍如何在开发或测试环境中部署副本集。对于生产部署,请参阅部署副本集教程。
概述
三个成员副本集提供了足够的冗余,足以应对大多数网络分区和其他系统故障。这些副本集的容量也足以满足许多分布式读操作的需求。副本集的成员数应始终为奇数。这将确保选举顺利进行。有关设计副本集的更多信息,请参阅复制概述。
要求
对于测试和开发系统,可以在本地系统上或虚拟实例内运行您的 mongod
实例。
在部署副本集之前,必须在每个将成为副本集一部分的系统上安装 MongoDB。如果您尚未安装 MongoDB,请参阅安装教程。
每个成员均须能连接到所有其他成员。关于如何检查连接,请参阅《测试所有成员之间的连接》。
考虑因素
重要
要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。
使用主机名而不是 IP 地址在分割网络范围内配置集群。从 MongoDB 5开始。 0 ,仅配置了 IP 地址的节点未通过启动验证,因此不会启动。
IP 绑定
MongoDB 二进制文件 mongod
和 mongos
默认绑定到本地主机。如果为此二进制文件设置了 net.ipv6
配置文件设置或 --ipv6
命令行选项,则该二进制文件还会绑定到本地主机 IPv6 地址。
默认情况下,绑定到本地主机的mongod
和mongos
只接受来自同一计算机上运行的客户端的连接。这种绑定行为包括 mongosh
以及副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到本地主机的二进制文件。
要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp
配置文件设置或 --bind_ip
命令行选项来指定主机名或 IP 地址的列表。
警告
从 MongDB5 开始。0 、 水平分割 DNS 仅配置了 IP 地址的节点无法启动验证并报告错误。请参阅disableSplitHorizonIPCheck
。
例如,以下 mongod
实例会绑定到本地主机和主机名 My-Example-Associated-Hostname
,而该主机名与 IP 地址 198.51.100.1
相关联:
mongod --bind_ip localhost,My-Example-Associated-Hostname
为了连接到此实例,远程客户端必须指定主机名或其关联的 IP 地址 198.51.100.1
:
mongosh --host My-Example-Associated-Hostname mongosh --host 198.51.100.1
在此测试部署中,这三个成员运行于同一台机器上。
副本集命名
重要
这些说明只应用于测试或开发部署。
此过程中的示例创建名为 rs0
的新副本集。
如果您的应用程序连接到多个副本集,则每个副本集的名称必须不同。有些驱动程序会按副本集名称对副本集连接进行分组。
步骤
重要
要避免因 IP 地址变更而更新配置,请使用 DNS 主机名而非 IP 地址。在配置副本集成员或分片集群成员时,使用 DNS 主机名而非 IP 地址尤为重要。
使用主机名而不是 IP 地址在分割网络范围内配置集群。从 MongoDB 5开始。 0 ,仅配置了 IP 地址的节点未通过启动验证,因此不会启动。
发出类似于以下内容的命令,为每个节点创建必要的数据目录:
mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2 这样可创建名为 "rs0-0"、"rs0-1" 和 "rs0-2" 的目录,其中将包含实例的数据库文件。
发出以下命令,在相应 shell 窗口中启动
mongod
实例:第一个节点:
mongod --replSet rs0 --port 27017 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-0 --oplogSize 128 第二个节点:
mongod --replSet rs0 --port 27018 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-1 --oplogSize 128 第三个节点:
mongod --replSet rs0 --port 27019 --bind_ip localhost,<hostname(s)|ip address(es)> --dbpath /srv/mongodb/rs0-2 --oplogSize 128 它会将每个实例作为名为
rs0
的副本集的某一成员来启动,且每个成员均运行于不同端口上;同时,使用--dbpath
设置来指定数据目录的路径。如果您已在使用推荐的端口,则请选择其他端口。实例绑定到主机的 IP 地址以及本地主机。
--oplogSize
设置可减少每个mongod
实例使用的磁盘空间。[1] 这非常适合测试和开发部署,因为它可以防止机器过载。有关此选项和其他配置选项的更多信息,请参阅配置文件选项。通过 连接到您的
mongod
mongosh
实例之一。您需要通过指定端口号来指示具体实例。为了简单明了起见,您可能希望选择第一个,如以下命令所示;mongosh --port 27017 在
mongosh
中,使用rs.initiate()
启动副本集。您可以在mongosh
环境中创建副本集配置对象,如以下示例所示:rsconf = { _id: "rs0", members: [ { _id: 0, host: "<hostname>:27017" }, { _id: 1, host: "<hostname>:27018" }, { _id: 2, host: "<hostname>:27019" } ] } 将
<hostname>
替换为系统的主机名,然后将rsconf
文件传递给rs.initiate()
,如下所示:rs.initiate( rsconf ) 通过发出以下命令显示,当前副本集配置:
rs.conf() 副本集配置对象与以下内容类似:
{ "_id" : "rs0", "version" : 1, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "<hostname>:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "<hostname>:27018", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "<hostname>:27019", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("598f630adc9053c6ee6d5f38") } }
使用 rs.status()
操作可随时检查副本集的状态。
[1] | oplog 的大小可能会超过其配置的大小限制,从而避免删除 majority commit point 。 |