为测试和开发部署自管理复制集
此步骤描述在开发或测试环境中部署复制集。对于生产部署,请参阅部署自管理复制集教程。
概述
由三个成员组成的副本集提供足够的冗余,可以生存大多数网络分区和其他系统故障。这些集合也具有足够的容量进行许多分布式读取操作。副本集应始终具有奇数个成员。这确保了选举可以顺利地进行。有关设计副本集的更多信息,请参阅复制概述。
要求
对于测试和开发系统,您可以在本地系统或虚拟实例中运行您的mongod
实例。
在部署副本集之前,您必须在将参与您的副本集的每个系统上安装MongoDB。如果您尚未安装MongoDB,请参阅安装教程。
每个成员必须能够连接到每个其他成员。有关检查连接的说明,请参阅检查所有成员之间的连接。
注意事项
重要
为了避免因IP地址更改而导致配置更新,请使用DNS主机名而不是IP地址。在配置副本集成员或分片集群成员时,使用DNS主机名而不是IP地址尤为重要。
使用主机名而不是IP地址来配置跨越分割网络视域的集群。从MongoDB 5.0开始,仅配置了IP地址的节点将失败启动验证,并且不会启动。
IP绑定
MongoDB二进制文件(mongod
和mongos
)默认绑定到localhost。如果为二进制文件设置了net.ipv6
配置文件设置或--ipv6
命令行选项,则二进制文件还将绑定到localhost的IPv6地址。
默认情况下,绑定到localhost的mongod
和mongos
仅接受运行在同一台计算机上的客户端的连接。此绑定行为包括mongosh
和您副本集或分片集群的其他成员。远程客户端无法连接到仅绑定到localhost的二进制文件。
要覆盖默认绑定并绑定到其他IP地址,请使用 net.bindIp
配置文件设置或 --bind_ip
命令行选项来指定主机名或IP地址列表。
警告
从MongoDB 5.0开始,仅配置了IP地址的节点在启动验证中失败并报告错误。请参阅 disableSplitHorizonIPCheck
。
例如,以下 mongod
实例同时绑定到localhost和主机名 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] 有关此和其他配置选项的更多信息,请参阅 自管理配置文件选项。通过
mongosh
连接到您的mongod
实例之一。您需要通过指定端口号来指定实例。为了简单和清晰,您可能想选择第一个,如下命令所示;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可以超过其配置的大小限制,以避免删除多数提交点 。 |