将自管理从节点转换为仲裁节点
如果副本集中的从节点不再需要保存数据,但需要保留在副本集中以确保副本集可以选举主节点,则可以使用本教程中的任一过程将从节点转换为仲裁节点。这两个过程在操作上是等效的:
您可以在与前一个从节点相同的端口上操作仲裁节点。在此过程中,您必须先关闭从节点并删除其数据,然后再重新启动并将其重新配置为仲裁节点。
有关此过程,请参阅将从节点转换为仲裁节点并重新使用端口号。
在新端口上运行仲裁节点。在此过程中,您可以在关闭作为从节点运行的实例之前,将服务器重新配置为仲裁节点。
有关此操作过程,请参阅将从节点转换为在新端口号上运行的仲裁节点。
将从节点转换为仲裁节点并重用端口号
如果您的应用程序直接连接到从节点,请修改应用程序,以确保 MongoDB 查询不会到达从节点。
关闭从节点。
通过调用
rs.remove()
方法,从副本集中删除从节点。在
mongosh
中连接到当前主节点时执行此操作:
rs.remove("<hostname><:port>") 通过调用
mongosh
中的
rs.conf()
方法,验证副本集不再包含从节点:
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()
方法将从节点转换为仲裁节点:rs.addArb("<hostname><:port>") 通过调用
mongosh
中的
rs.conf()
方法,验证仲裁节点是否属于副本集。
rs.conf() 仲裁节点应包括以下内容:
"arbiterOnly" : true
将从节点转换为在新端口号上运行的仲裁节点
如果您的应用程序直接连接到从节点或具有引用从节点的连接字符串,请修改应用程序,以确保 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
中,使用rs.addArb()
方法将新的mongod
实例转换为仲裁节点:rs.addArb("<hostname><:port>") 在
mongosh
中调用
rs.conf()
方法,验证仲裁节点是否已添加到副本集。
rs.conf() 仲裁节点应包括以下内容:
"arbiterOnly" : true 关闭从节点。
调用
mongosh
中的rs.remove()
方法,从副本集中移除从节点
:
rs.remove("<hostname><:port>") 通过调用
mongosh
中的
rs.conf()
方法,验证副本集不再包含旧的从节点:
rs.conf() 将从节点的数据目录移动到存档文件夹。例如:
mv /data/db /data/db-old 注意
Optional
您可以改为删除数据。