Docs 菜单

Docs 主页开发应用程序MongoDB Manual

向副本集添加成员

在此页面上

  • 概述
  • 要求
  • 步骤

本教程介绍如何向现有副本集添加额外成员。 有关复制部署模式的背景,请参阅副本集部署架构文档。

一个副本集最多可以有七个投票成员。要将某个成员添加到已经有七个投票成员的副本集中,您必须将该成员添加为无投票权的成员,或者从 existing member 中移除一个投票。

在生产部署中,您可以配置一个初始化脚本来管理成员进程。

可以使用这些程序向现有副本集添加新成员。

警告

每个副本集节点必须属于且只属于一个副本集。副本集节点不能属于多个副本集。

您可以使用这些步骤重新添加已删除的节点。

如果被删除节点上的数据相对较新,该节点就会恢复并赶上副本集的其他节点。

重要

当已删除的节点处于独立运行模式时,请勿在该节点上创建新的复制集合。如果该独立节点会重新加入副本集,则针对新集合的后续操作会出错。

如果您有现有成员的备份或快照,则可将数据文件(例如 dbPath 目录)移至新系统,并使用它们来快速启动新成员。这些文件必须为:

  • 来自同一副本集成员的数据文件的有效副本。 有关更多信息,请参阅使用文件系统快照进行备份和恢复文档。

    重要

    始终使用文件系统快照创建现有副本集成员的副本。请勿使用mongodumpmongorestore为新的副本集成员播种。

  • 晚于主节点的 oplog 中的最早操作。该新成员必须能通过应用 oplog 中的操作来变为当前成员。

警告

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

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

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

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

例如,以下 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

重要

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

使用主机名而不是 IP 地址在分割网络范围内配置集群。从 MongoDB 5开始。 0 ,仅配置了 IP 地址的节点未通过启动验证,因此不会启动。

  1. 活动副本集。

  2. 一个新的 MongoDB 系统,它可支持您的数据集,并可由活动副本集通过网络进行访问。

否则,请使用 MongoDB 安装教程部署副本集教程。

在向现有副本集添加新成员之前,请使用以下策略之一来准备新成员的数据目录

  • 确保新成员的数据目录包含数据。新成员将复制现有成员的数据。

    如果新成员处于正在恢复状态,则它必须退出并成为辅助成员,然后 MongoDB 才能在复制过程中复制所有数据。此过程需要一些时间,但无需管理员干预。

  • 从现有成员手动复制数据目录。 新成员成为从节点成员,并将赶上副本集的当前状态。 复制数据可能会缩短新成员成为当前成员的时间。

    确保您可以将数据目录复制到新成员,并在 oplog 允许的窗口内开始复制。否则,新实例必须执行初始同步,这会完全重新同步数据,如重新同步副本集成员中所述。

    使用 rs.printReplicationInfo() 检查副本集成员针对 oplog 的当前状态。

有关复制部署模式的背景,请参阅副本集部署架构文档。

重要

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

使用主机名而不是 IP 地址在分割网络范围内配置集群。从 MongoDB 5开始。 0 ,仅配置了 IP 地址的节点未通过启动验证,因此不会启动。

  1. 启动新的 mongod 实例。指定数据目录和副本集名称。以下示例指定 /srv/mongodb/db0 数据目录和 rs0 副本集:

    mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<hostname(s)|ip address(es)>

    警告

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

    有关配置选项的更多信息,请参阅 mongod 手册页面。

    注意

    Optional

    您可以在 mongod.conf 配置文件中指定数据目录、副本集名称和 IP 绑定,然后使用以下命令启动 mongod

    mongod --config /etc/mongod.conf
  2. 连接到副本集的主节点。

    您只能在连接到主节点时添加成员。如果不知道哪个成员是主节点成员,请登录副本集的任何成员并发出db.hello() 命令。

  3. 使用 rs.add() 将新成员添加到副本集。将 member configuration document 传递给此方法。例如,要在主机 mongodb3.example.net 上添加成员,请发出以下命令:

    rs.add( { host: "mongodb3.example.net:27017" } )

    警告

    在 MongoDB 5.0 之前,新增的节点仍然算作投票成员,尽管在数据保持一致之前,它们既不能服务于读取,也不能成为主节点。如果您运行的是 5.0 之前的 MongoDB 版本,并添加了 votespriority 设置大于零的从节点,则可能会导致有大多数投票成员在线却无法选举主节点的情况。为避免出现这种情况,可考虑先添加 priority :0votes :0 的新从节点。然后运行 rs.status(),确保成员已过渡到 SECONDARY 状态。最后,使用 rs.reconfig() 更新其优先级和投票。

← 将独立运行的 mongod 转换为副本集

在此页面上