将辅助节点转换为仲裁者

在本页面

如果replica set中有一个secondary不再需要保留数据,而是需要保留在集合中以确保该集合可以选小学,则可以使用本教程中的任一过程将辅助副本转换为arbiter。这两个过程在操作上是等效的:

  • 您可以在与前一个备用服务器相同的端口上操作仲裁器。在此过程中,您必须先关闭辅助节点并删除其数据,然后重新启动并将其重新配置为仲裁程序。

有关此过程,请参见将辅助转换为仲裁器并重新使用端口号

  • 在新端口上运行仲裁程序。在此过程中,您可以在关闭作为辅助服务器运行的实例之前将服务器重新配置为仲裁服务器。

有关此过程,请参见将 Secondary 转换为在新端口号上运行的仲裁器

Note

对于以下 MongoDB 版本,具有仲裁器的副本集与pv0相比,pv1增加了w:1回滚的可能性:

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 或更早版本

See 副本集协议版本.

将辅助转换为仲裁器并重新使用端口号

  • 如果您的应用程序直接连接到辅助服务器,请修改应用程序,以使 MongoDB 查询不会到达辅助服务器。

  • 关闭辅助服务器。

  • 通过调用rs.remove()方法将secondaryreplica set中删除。在连接到mongoShell 中的当前primary时执行此操作:

rs.remove("<hostname><:port>")
  • 通过在mongo shell 中调用rs.conf()方法来验证副本集不再包含辅助副本:
rs.conf()
  • 将辅助数据库的数据目录移动到存档文件夹。例如:
mv /data/db /data/db-old

Optional

您可以改为删除数据。

  • 重新启动mongod实例时,创建一个新的空数据目录以指向。您可以重用以前的名称。例如:
mkdir /data/db
  • 重新启动辅助服务器的mongod实例,并指定端口号,空数据目录和副本集。您可以使用以前使用的相同端口号。发出类似于以下内容的命令:

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

mongod --port 27021 --dbpath /data/db --replSet rs  --bind_ip localhost,<ip address of the mongod host>
  • mongo shell 中,使用rs.addArb()方法将辅助服务器转换为仲裁器:
rs.addArb("<hostname><:port>")
  • 通过在mongo shell 中调用rs.conf()方法来验证仲裁者是否属于副本集。
rs.conf()

仲裁员应包括以下内容:

"arbiterOnly" : true

将辅助端口转换为在新端口号上运行的仲裁器

  • 如果您的应用程序直接连接到辅助服务器或具有引用辅助服务器的连接字符串,请修改应用程序,以使 MongoDB 查询不会到达辅助服务器。

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

mkdir /data/db-temp
  • 在新的端口号上启动一个新的mongod实例,并指定新的数据目录和现有的副本集。发出类似于以下内容的命令:

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

mongod --port 27021 --dbpath /data/db-temp --replSet rs --bind_ip localhost,<ip address of the mongod host>
  • 在连接到当前主节点的mongo shell 中,使用rs.addArb()方法将新的mongod实例转换为仲裁器:
rs.addArb("<hostname><:port>")
  • 通过调用mongo shell 中的rs.conf()方法,验证仲裁程序已添加到副本集。
rs.conf()

仲裁员应包括以下内容:

"arbiterOnly" : true
rs.remove("<hostname><:port>")
  • 通过在mongo shell 中调用rs.conf()方法来验证副本集不再包括旧的辅助副本:
rs.conf()
  • 将辅助数据库的数据目录移动到存档文件夹。例如:
mv /data/db /data/db-old

Optional

您可以改为删除数据。