2014-09-30 19 views
0

从Node.js打开身份验证的3个副本服务器组的副本集时,出现奇怪的问题当连接到MongoDB Replicaset时,Node.js“auth fail”只有3台服务器中有2台up

我的问题是,当所有3台服务器都列在种子列表中时,只要我连接到MongoDB,它就会引发“auth failed”错误。

如果我从种子列表中取出服务器关闭,一切工作正常。

我想弄清楚我缺少什么,如果有另一种方式使用MongoClient从Node.js连接到复制副本。

var seedlist = "SERVER1:27017,SERVER2:27017,SERVER3:27017"; 
var connectionString = "mongodb://" + dbuser + ":" + dbpassword + "@" + seedlist + "/" + databaseName; 

对于本示例可以说SERVER3关闭。为什么会在列表中引起问题。来自节点的MongoDB客户端是否尝试向副本集的每个成员进行身份验证?

回答

1

不知道我喜欢Mongo客户端如何抛出异常,如果只有一个种子列表中的成员有问题,但这是我发现作为我的问题的原因。

事实证明,通过与Engineering的不正确通信,Server3上的Mongod实例确实已经启动。但是,此实例尚未启用身份验证。

从我可以收集的信息来看,Node.js的Mongo Client将尝试向种子列表中的成员进行身份验证,并获取有关Replicaset的信息。在这种情况下,因为服务器3没有启用身份验证,所以失败时会抛出“身份验证失败”错误。

我的研究实际上很好,因为我发现种子列表不必包含副本集的每个成员。客户端将使用种子列表中的任何成员自动确定副本集的所有成员。