客户端连接配置中是否应包括MongoDB仲裁器?

客户端连接配置中是否应包括MongoDB仲裁器?,mongodb,cluster-computing,Mongodb,Cluster Computing,如果在Mongo中只设置了两个节点的副本集,则需要一个仲裁器来确保在对新主节点的投票中始终有多数票。仲裁人本身永远不会成为主人,它纯粹是为了在一场势均力敌的选举中提供决定性的一票 将客户机(在我的例子中是Java)连接到MongoDB集群时,我们应该在连接配置中: List addrs = new ArrayList(); addrs.add( new ServerAddress( "localhost" , 27017 ) ); addrs.add( new ServerAddress( "l

如果在Mongo中只设置了两个节点的副本集,则需要一个仲裁器来确保在对新主节点的投票中始终有多数票。仲裁人本身永远不会成为主人,它纯粹是为了在一场势均力敌的选举中提供决定性的一票

将客户机(在我的例子中是Java)连接到MongoDB集群时,我们应该在连接配置中:

List addrs = new ArrayList();
addrs.add( new ServerAddress( "localhost" , 27017 ) );
addrs.add( new ServerAddress( "localhost" , 27018 ) );

Mongo mongo = new Mongo(addrs);
连接配置中是否应包括仲裁器?我猜不是因为他们:

没有数据副本,永远不会成为主节点(甚至是可读的辅助节点)

(摘自)


…但我只是想再核实一下

不,您不需要在连接中包含仲裁程序

毕竟,正如您所怀疑的,在您的代码中尝试连接到其中一个是没有意义的,因为那里没有数据。他们只是在幕后做自己的事情来帮助自动故障切换


您甚至不必指定连接配置中的所有服务器(甚至不必指定主服务器)——只要您提到的其中一个服务器返回响应,它就可以从那里找到主服务器。尽管如此,你的名字越多越好,只是以防万一其中的一些会被删除。

这个列表只是一个种子列表。副本集的实际成员在连接到一个副本集后确定。您可以只指定27017处的一个(但如果该位置已关闭则会很糟糕)