部署用于测试和开发的副本集

此过程描述了在开发或测试环境中部署副本集。对于生产部署,请参阅 部署副本集教程。

本教程描述了如何从三个在禁用访问控制的情况下运行的 现有实例创建一个三节点副本集。mongod

要部署启用访问控制的副本集,请 参阅使用密钥文件身份验证部署副本集。如果您希望从单个 MongoDB 实例部署副本集,请参阅 将独立实例转换为副本集。有关副本集部署的更多信息,请参阅复制副本集部署架构文档。

概述

三个节点副本集提供了足够的冗余来应对大多数网络分区和其他系统故障。这些集合还具有足够的容量用于许多分布式读取操作。副本集应该总是有奇数个节点。这确保了选举能够顺利进行。有关设计副本集的更多信息,请参阅复制概述。

要求

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

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

每个节点都必须能够连接到每个其他节点。有关如何检查您的连接的说明,请参阅 测试所有节点之间的连接。

注意事项

IMPORTANT

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

使用主机名而不是 IP 地址来配置跨分割网络水平的集群。从 MongoDB 5.0 开始,仅配置了 IP 地址的节点将无法通过启动验证而不会启动。

IP绑定

WARNING

在绑定到非本地主机(例如可公开访问的)IP 地址之前,请确保您已保护集群免受未经授权的访问。有关安全建议的完整列表,请参阅 安全清单。至少,考虑 启用身份验证强化网络基础设施。

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

默认情况下mongodmongos绑定到 localhost 的只接受来自在同一台计算机上运行的客户端的连接。这种绑定行为包括 mongosh以及您的副本集或分片集群的其他节点。远程客户端无法连接到仅绑定到本地主机的二进制文件。

要覆盖默认绑定并绑定到其他 IP 地址,请使用 net.bindIp配置文件设置或--bind_ip 命令行选项指定主机名或 IP 地址列表。

WARNING

从 MongDB 5.0 开始,水平分割 DNS仅配置了 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

在这个测试部署中,三个节点在同一台机器上运行。

副本集命名

IMPORTANT

这些说明只能用于测试或开发部署。

此过程中的示例创建一个名为 的新副本集rs0

如果您的应用程序连接到多个副本集,则每个副本集必须具有不同的名称。一些驱动程序按副本集名称对副本集连接进行分组。

程序

IMPORTANT

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

使用主机名而不是IP地址来配置跨分割网络水平的集群。从MongoDB5.0开始,仅配置了IP地址的节点将无法通过启动验证而不会启动。

  1. 通过发出类似于以下的命令为每个节点创建必要的数据目录:

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

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

  1. mongod通过发出以下命令在它们自己的 shell 窗口中启动您的实例:

WARNING

在绑定到非本地主机(例如可公开访问的)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 ] 这是测试和开发部署的理想选择,因为它可以防止机器过载。有关此配置选项和其他配置选项的更多信息,请参阅配置文件选项。

  1. 通过以下方式连接到您的一个mongod实例 mongosh. 您将需要通过指定其端口号来指示哪个实例。为了简单明了,您可能希望选择第一个,如以下命令所示;

    mongosh --port 27017
    
  1. 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 )
  1. 通过发出以下命令显示当前副本配置:

    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 可以增长到超过其配置的大小限制以避免删除majority commit point.

部署副本集部署地理冗余副本集

原文链接 - https://docs.mongodb.com/manual/tutorial/deploy-replica-set-for-testing/

译者:陆文龙

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""