MongoDB连接字符串是否需要Replicaset中每个服务器的身份验证详细信息



我们已经发现,在主失败后,我们的次要未正确身份验证。我们有2个MongoDB服务器(v3.4)在复制体中正确设置:

mongo1:27017
mongo2:27017

和我们的连接字符串(对于node.js的mongodb驱动程序v2.2.19),是这样的:

mongodb://username:password@mongo1,mongo2/db?replicaSet=rs0

现在,我们的主要失败和次级mongo2被选举了。但是,DB调用失败了"未授权"错误。所以我又一看了MongoDB文档:

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

看起来很模棱两可,每个主机都需要username:password吗?但这很奇怪,因为它们都被复制了,所以用户应该相同,对

我什至尝试了它,在应用程序中使用此连接字符串:

mongodb://username:password@mongo1,username:password@mongo2/db?replicaSet=rs0

但失败了:Error: Username with password containing an unescaped colon

用户名和密码是字母数字,因此该样式的URI似乎存在一个解析问题。但是使用原始,它没有正确身份验证。因此,这些问题似乎彼此矛盾。我已经在独立模式下验证了用户在两个服务器上存在的,并且具有适当的权限。所以我不确定问题所在。我发现了另一个非常相似的问题,但没有答案:(

好吧,我永远无法弄清楚,但是更新node.js驱动程序(v2.2.19-> v2.2.33)似乎已经修复了它。我没有看到ChangElog中的任何相关内容,也没有足够的兴趣来比较Diff。c'est la Vie de编程。

最新更新