如果副本集中的从节点不再需要保存数据,但需要保留在副本集中以确保副本集可以选举主节点,则可以使用本教程中的任一过程将从节点转换为仲裁节点。这两个过程在操作上是等效的:
您可以在与前一个从节点相同的端口上操作仲裁节点。在此过程中,您必须先关闭从节点并删除其数据,然后再重新启动并将其重新配置为仲裁节点。
有关此过程,请参阅将从节点转换为仲裁节点并重新使用端口号。
在新端口上运行仲裁节点。在此过程中,您可以在关闭作为从节点运行的实例之前,将服务器重新配置为仲裁节点。
有关此操作过程,请参阅将从节点转换为在新端口号上运行的仲裁节点。
将从节点转换为仲裁节点并重用端口号
如果您的应用程序直接连接到从节点,请修改应用程序,以确保 MongoDB 查询不会到达从节点。
关闭从节点。
通过调用 方法从副本集删除从从节点(secondary node
rs.remove()from replica set)。在连接到 中的当前主节点 (primary node in themongoshreplica set)时执行此操作:rs.remove("<hostname><:port>") 通过调用
rs.conf()中的 方法,验证副本集是否不再包含从节点(secondary node from replicamongoshset):rs.conf() 将从节点的数据目录移动到存档文件夹。例如:
mv /data/db /data/db-old 注意
Optional
您可以改为删除数据。
创建一个新的空数据目录以在重新启动
mongod实例时指向该目录。以前的名称可以重复使用。例如:mkdir /data/db 重新启动从节点的
mongod实例,并指定端口号、空数据目录和副本集。您可以使用以前用过的相同端口号。发出如下所示的命令:警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
mongod --port 27021 --dbpath /data/db --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> mongosh在rs.addArb()中,使用 方法从从节点(secondary node from replica set)转换为仲裁节点:rs.addArb("<hostname><:port>")
将从节点转换为在新端口号上运行的仲裁节点
如果您的应用程序直接连接到从节点或具有引用从节点的连接字符串,请修改应用程序,以确保 MongoDB 查询不会到达从节点。
创建一个新的空数据目录,以便与新端口号一起使用。例如:
mkdir /data/db-temp 在新的端口号上启动新的
mongod实例,并指定新数据目录和现有的副本集。发出如下所示的命令:警告
将实例绑定到可公开访问的 IP 地址之前,必须保护集群免遭未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少应考虑启用身份验证和强化网络基础设施。
mongod --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<hostname(s)|ip address(es)> mongosh在连接到当前主节点 (primary node in the replica set)的 中,使用 方法将新的mongodrs.addArb()实例转换为仲裁节点节点:rs.addArb("<hostname><:port>") 关闭从节点。
通过调用 中的 方法从副本集删除从节点(secondary node from replica
rs.remove()mongoshset):rs.remove("<hostname><:port>") 通过调用
rs.conf()中的 方法,验证副本集是否不再包含旧的从节点(secondary node from replicamongoshset):rs.conf() 将从节点的数据目录移动到存档文件夹。例如:
mv /data/db /data/db-old 注意
Optional
您可以改为删除数据。