Node.js”;auth fail”;当连接到MongoDB Replicaset时,3台服务器中只有2台在运行

Node.js "auth fail" when connecting to MongoDB Replicaset with only 2 out of the 3 servers up

本文关键字:服务器 3台 2台 运行 Replicaset fail auth js 连接 Node MongoDB      更新时间:2023-09-26

我在使用Node.js 中启用了身份验证的3个实例的副本集时遇到了一个奇怪的问题

我的问题是,当所有3台服务器都列在种子列表中时,在我的应用程序中,只要我连接到MongoDB,就会抛出一个"auth failed"错误。

如果我取出种子列表中的服务器,一切都会正常工作。

我正试图弄清楚我缺少了什么,以及是否有其他方法可以使用MongoClient从Node.js连接到Replicaset。

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

对于本例,假设SERVER3已关闭。为什么把它列入名单会引起问题。Node的MongoDB客户端是否正在尝试对副本集的每个成员进行身份验证?

如果种子列表中只有一个成员有问题,我不确定我喜欢Node的Mongo客户端抛出异常的方式,但以下是我发现的问题原因。

事实证明,通过与Engineering的不当通信,Server3上的Mongod实例确实启动了。但是,此实例的身份验证尚未打开。

据我所知,Node.js的Mongo客户端将尝试向种子列表中的成员进行身份验证,并获取有关Replicaset的信息。在这种情况下,因为服务器3没有打开身份验证,所以它未能引发"auth fail"错误。

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