文档菜单
文档首页
/
MongoDB 手册
/ / /

为测试和开发部署自管理复制集

本页内容

  • 概述
  • 要求
  • 注意事项
  • 步骤

此步骤描述在开发或测试环境中部署复制集。对于生产部署,请参阅部署自管理复制集教程。

由三个成员组成的副本集提供足够的冗余,可以生存大多数网络分区和其他系统故障。这些集合也具有足够的容量进行许多分布式读取操作。副本集应始终具有奇数个成员。这确保了选举可以顺利地进行。有关设计副本集的更多信息,请参阅复制概述。

对于测试和开发系统,您可以在本地系统或虚拟实例中运行您的mongod实例。

在部署副本集之前,您必须在将参与您的副本集的每个系统上安装MongoDB。如果您尚未安装MongoDB,请参阅安装教程。

每个成员必须能够连接到每个其他成员。有关检查连接的说明,请参阅检查所有成员之间的连接。

重要

为了避免因IP地址更改而导致配置更新,请使用DNS主机名而不是IP地址。在配置副本集成员或分片集群成员时,使用DNS主机名而不是IP地址尤为重要。

使用主机名而不是IP地址来配置跨越分割网络视域的集群。从MongoDB 5.0开始,仅配置了IP地址的节点将失败启动验证,并且不会启动。

警告

在将实例绑定到公开可访问的IP地址之前,您必须确保集群安全,防止未经授权的访问。有关安全建议的完整列表,请参阅自托管部署安全清单。至少,请考虑启用身份验证强化网络基础设施

MongoDB二进制文件(mongodmongos)默认绑定到localhost。如果为二进制文件设置了net.ipv6配置文件设置或--ipv6命令行选项,则二进制文件还将绑定到localhost的IPv6地址。

默认情况下,绑定到localhost的mongodmongos仅接受运行在同一台计算机上的客户端的连接。此绑定行为包括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地址的节点将失败启动验证,并且不会启动。

  1. 通过执行类似以下命令为每个成员创建必要的数据目录:

    mkdir -p /srv/mongodb/rs0-0 /srv/mongodb/rs0-1 /srv/mongodb/rs0-2

    这将创建名为 "rs0-0"、"rs0-1" 和 "rs0-2" 的目录,其中将包含实例的数据库文件。

  2. 通过以下命令在每个自己的 shell 窗口中启动您的 mongod 实例:

    警告

    在将实例绑定到公开可访问的IP地址之前,您必须确保集群安全,防止未经授权的访问。有关安全建议的完整列表,请参阅自托管部署安全清单。至少,请考虑启用身份验证强化网络基础设施

    第一个成员

    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] 有关此和其他配置选项的更多信息,请参阅 自管理配置文件选项。

  3. 通过 mongosh 连接到您的 mongod 实例之一。您需要通过指定端口号来指定实例。为了简单和清晰,您可能想选择第一个,如下命令所示;

    mongosh --port 27017
  4. 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 )
  5. 通过以下命令显示当前的副本配置

    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()操作在任何时候检查副本集的状态。

提示

另请参阅

有关更多信息,请参阅以下shell函数的文档

您还可以考虑使用简单的设置脚本作为基本自动配置的副本集示例。

有关MongoDB中读写语义的详细说明,请参阅副本集读写语义

[1] oplog可以超过其配置的大小限制,以避免删除多数提交点

返回

替换成员