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

向自管理副本集添加成员

本页内容

  • 概述
  • 要求
  • 程序

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

副本集可以最多包含七个投票成员。若要向已有七个投票成员的副本集添加成员,您必须将该成员添加为非投票成员,或从现有成员中移除投票。

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

您可以使用这些程序将新成员添加到现有副本集中。

警告

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

您可以使用这些程序重新添加已移除的节点。

如果已移除节点上的数据相对较新,节点将恢复并追赶上其他副本集。

重要

在已移除节点处于独立模式时,请避免在该节点上创建新的复制集合。如果独立节点重新加入副本集,则对新集合的后续操作将产生错误。

如果您有现有成员的备份或快照,可以将数据文件(例如,dbPath 目录)移动到新系统,并快速启动新成员。文件必须是

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

    重要

    始终使用文件系统快照创建现有副本集成员的副本。不要使用mongodumpmongorestore 来初始化新的副本集成员。

  • 比主节点的 主节点操作日志 中的最旧操作更近。新成员必须能够通过应用主节点的操作日志中的操作来变得最新。

警告

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

MongoDB的二进制文件,包括mongodmongos,默认绑定到本地主机。如果设置了配置文件中的net.ipv6设置或二进制的--ipv6命令行选项,则二进制文件将额外绑定到本地主机的IPv6地址。

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

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

警告

从MongoDB 5.0开始,仅配置了IP地址的节点将失败启动验证并报告错误。请参阅disableSplitHorizonIPCheck

例如,以下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才能在复制过程中作为数据复制的一部分复制所有数据。这个过程需要时间,但不需要管理员干预。

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

    请确保您可以将数据目录复制到新成员,并在操作日志允许的窗口内开始复制。否则,新实例将不得不进行初始同步,如在自管理副本集成员中重新同步中所述。

    使用rs.printReplicationInfo()来检查副本集成员关于操作日志的当前状态。

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

重要

为了避免由于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手册页面。

    注意

    可选

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

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

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

  3. 使用rs.add()将新成员添加到副本集。将成员配置文档传递给该方法。例如,要添加位于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()更新其优先级和投票。

返回

转换为副本集

本页内容