Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

将成员添加到自管理副本集

在此页面上

  • Overview
  • 要求
  • 步骤

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

一个副本集最多可以有七个投票成员。要将某个成员添加到已经有七个投票成员的副本集中,您必须将该成员添加为无投票权的成员,或者从 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() 更新其优先级和投票。

后退

转换为副本集

在此页面上