我们发现我们的辅助服务器在主要故障转移后未正确进行身份验证。我们在复制集中正确设置了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似乎存在解析问题。但是对于原版,它没有正确验证。所以这些问题似乎相互矛盾。我已在独立模式下验证用户是否存在于两台服务器上,并且具有适当的权限。所以我不确定问题出在哪里。我发现另一个very similar question有一个不同的驱动程序,但没有答案:(
答案 0 :(得分:0)
好吧,我永远无法理解这一点,但更新Node.js驱动程序(v2.2.19 - > v2.2.33)似乎已修复它。我没有在更改日志中看到任何相关内容,而且我没有足够的兴趣来比较差异。 C' est la vie de programming。