翻译或纠错本页面

将从节点转换为投票节点

如果我们在 replica set 中的 secondary 不在需要保持数据,而仅需其在选举中能 elect a primary ,通过本教程我们可以将该从节点转换为 arbiter 。任何系统上都是一样的操作方式:

将从节点转换为投票节点并复用端口

  1. 如果我们的应用程序是直接连接到从节点的,我们需要修改应用程序的连接方式让其不会再在该从节点是进行查询。

  2. 关闭从节点。

  3. 使用 rs.remove() 命令来将 secondaryreplica set 中移除。该命令需要在 primary 中执行:

    rs.remove("<hostname><:port>")
    
  4. 通过在 mongo 窗口中执行 rs.conf() 命令来确认复制集中已经不再包含该节点。

    rs.conf()
    
  5. 将从节点的数据目录移至其他处以作保留。如:

    mv /data/db /data/db-old
    

    可选方式

    You may remove the data instead.

  6. 新建一个空的数据目录并在新的 mongod 启动过程中指定其为数据目录。我们可以使用之前的目录名。如:

    mkdir /data/db
    
  7. 重启 mongod 实例,并指定端口号,数据目录和复制集名。我们可以使用之前的端口号。启动命令大致如下:

    mongod --port 27021 --dbpath /data/db --replSet rs
    
  8. mongo 窗口中通过 rs.addArb() 命令来将新的投票节点加入复制集。

    rs.addArb("<hostname><:port>")
    
  9. mongo 窗口中通过 rs.conf() 命令来确认投票节点是否加入了复制集。

    rs.conf()
    

    投票节点必须要包含如下信息:

    "arbiterOnly" : true
    

将从节点转变为投票节点,并在新的端口上运行

  1. 如果我们的应用程序是直接连接到从节点或是通过复制集读选项来连接到从节点,我们需要修改应用程序的链接方式来防止其再连到该从节点上进行查询。

  2. 创建一个新的,空的数据目录并为新的端口提供服务,如:

    mkdir /data/db-temp
    
  3. 启动一个新的 mongod 实例在新的端口上,指定新的数据目录和现有的复制集名。命令大致如下:

    mongod --port 27021 --dbpath /data/db-temp --replSet rs
    
  4. 进入在主节点的 mongo 窗口中,并将新的 mongod 实例通过 rs.addArb() 命令来加入复制集。

    rs.addArb("<hostname><:port>")
    
  5. mongo 窗口中通过 rs.conf() 命令来确认投票节点是否被加入了复制集中。

    rs.conf()
    

    投票节点必须要包含如下信息:

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

  7. mongo 窗口中通过 rs.remove()`命令来将原来的 :term:`secondaryreplica set 删除。

    rs.remove("<hostname><:port>")
    
  8. Verify that the replica set no longer includes the old secondary by calling the rs.conf() method in the mongo shell:

    rs.conf()
    
  9. 将从节点的数据目录移至其他处以作保留。如:

    mv /data/db /data/db-old
    

    可选方式

    You may remove the data instead.