Docs 菜单

将自管理从节点转换为仲裁节点

如果副本集中的从节点不再需要保存数据,但需要保留在副本集中以确保副本集可以选举主节点,则可以使用本教程中的任一过程将从节点转换为仲裁节点。这两个过程在操作上是等效的:

  1. 如果您的应用程序直接连接到从节点,请修改应用程序,以确保 MongoDB 查询不会到达从节点。

  2. 关闭从节点。

  3. 通过调用 rs.remove() 方法,从副本集中删除从节点。在 mongosh 中连接到当前主节点时执行此操作:

    rs.remove("<hostname><:port>")
  4. 通过调用 mongosh 中的 rs.conf() 方法,验证副本集不再包含从节点:

    rs.conf()
  5. 将从节点的数据目录移动到存档文件夹。例如:

    mv /data/db /data/db-old

    注意

    Optional

    您可以改为删除数据。

  6. 创建一个新的空数据目录以在重新启动 mongod 实例时指向该目录。以前的名称可以重复使用。例如:

    mkdir /data/db
  7. 重新启动从节点的 mongod 实例,并指定端口号、空数据目录和副本集。您可以使用以前用过的相同端口号。发出如下所示的命令:

    警告

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

    mongod --port 27021 --dbpath /data/db --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)>
  8. mongosh 中,使用 rs.addArb() 方法将从节点转换为仲裁节点:

    rs.addArb("<hostname><:port>")
  9. 通过调用 mongosh 中的 rs.conf() 方法,验证仲裁节点是否属于副本集。

    rs.conf()

    仲裁节点应包括以下内容:

    "arbiterOnly" : true
  1. 如果您的应用程序直接连接到从节点或具有引用从节点的连接字符串,请修改应用程序,以确保 MongoDB 查询不会到达从节点。

  2. 创建一个新的空数据目录,以便与新端口号一起使用。例如:

    mkdir /data/db-temp
  3. 在新的端口号上启动新的 mongod 实例,并指定新数据目录和现有的副本集。发出如下所示的命令:

    警告

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

    mongod --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)>
  4. 在已与当前主节点连接的mongosh中,使用 rs.addArb() 方法将新的 mongod 实例转换为仲裁节点:

    rs.addArb("<hostname><:port>")
  5. mongosh 中调用 rs.conf() 方法,验证仲裁节点是否已添加到副本集。

    rs.conf()

    仲裁节点应包括以下内容:

    "arbiterOnly" : true
  6. 关闭从节点。

  7. 调用 mongosh 中的 rs.remove() 方法,从副本集中移除从节点

    rs.remove("<hostname><:port>")
  8. 通过调用 mongosh 中的 rs.conf() 方法,验证副本集不再包含旧的从节点:

    rs.conf()
  9. 将从节点的数据目录移动到存档文件夹。例如:

    mv /data/db /data/db-old

    注意

    Optional

    您可以改为删除数据。