将从节点转换为投票节点¶
On this page
如果我们在 replica set 中的 secondary 不在需要保持数据,而仅需其在选举中能 elect a primary ,通过本教程我们可以将该从节点转换为 arbiter 。任何系统上都是一样的操作方式:
我们可以将投票节点的端口设置的与之前的从节点一致。那么我们就必须关闭从节点并移除其数据文件,再重启与重新将其配置为投票节点。
参见 将从节点转换为投票节点并复用端口 以获得更多有关该过程的信息。
将投票节点以新的端口运行。我们可以在关闭已有的从节点之前就启动并配置一个投票节点。
参见 将从节点转变为投票节点,并在新的端口上运行 以获得有关该过程的更多信息。
将从节点转换为投票节点并复用端口¶
如果我们的应用程序是直接连接到从节点的,我们需要修改应用程序的连接方式让其不会再在该从节点是进行查询。
关闭从节点。
使用 rs.remove() 命令来将 secondary 从 replica set 中移除。该命令需要在 primary 中执行:
rs.remove("<hostname><:port>")
通过在 mongo 窗口中执行 rs.conf() 命令来确认复制集中已经不再包含该节点。
rs.conf()
将从节点的数据目录移至其他处以作保留。如:
mv /data/db /data/db-old
可选方式
You may remove the data instead.
新建一个空的数据目录并在新的 mongod 启动过程中指定其为数据目录。我们可以使用之前的目录名。如:
mkdir /data/db
重启 mongod 实例,并指定端口号,数据目录和复制集名。我们可以使用之前的端口号。启动命令大致如下:
mongod --port 27021 --dbpath /data/db --replSet rs
在 mongo 窗口中通过 rs.addArb() 命令来将新的投票节点加入复制集。
rs.addArb("<hostname><:port>")
在 mongo 窗口中通过 rs.conf() 命令来确认投票节点是否加入了复制集。
rs.conf()
投票节点必须要包含如下信息:
"arbiterOnly" : true
将从节点转变为投票节点,并在新的端口上运行¶
如果我们的应用程序是直接连接到从节点或是通过复制集读选项来连接到从节点,我们需要修改应用程序的链接方式来防止其再连到该从节点上进行查询。
创建一个新的,空的数据目录并为新的端口提供服务,如:
mkdir /data/db-temp
启动一个新的 mongod 实例在新的端口上,指定新的数据目录和现有的复制集名。命令大致如下:
mongod --port 27021 --dbpath /data/db-temp --replSet rs
进入在主节点的 mongo 窗口中,并将新的 mongod 实例通过 rs.addArb() 命令来加入复制集。
rs.addArb("<hostname><:port>")
在 mongo 窗口中通过 rs.conf() 命令来确认投票节点是否被加入了复制集中。
rs.conf()
投票节点必须要包含如下信息:
"arbiterOnly" : true
关闭从节点。
在 mongo 窗口中通过 rs.remove()`命令来将原来的 :term:`secondary 从 replica set 删除。
rs.remove("<hostname><:port>")
Verify that the replica set no longer includes the old secondary by calling the rs.conf() method in the mongo shell:
rs.conf()
将从节点的数据目录移至其他处以作保留。如:
mv /data/db /data/db-old
可选方式
You may remove the data instead.