我有3台服务器,它们运行MongoDB副本集,1个主服务器,1个辅助服务器,1个仲裁器。而且我在连接到此副本集时遇到问题。经过在本地主机和备用服务器上运行的test.js文件的测试。
这是我的test.js文件:
const MongoClient = require("mongodb").MongoClient;
const url = "mongodb://root:password"+
"@mgdb1.mydomain,mgdb2.mydomain/vApp?replicaSet=rs0&authSource=admin";
console.log("Connecting...");
MongoClient.connect(url,(err,client)=>{
if (err!=null){
console.log("Error:",err);
return;
}
console.log("Connected.");
process.exit();
});
奇怪的是,它显示ECONNREFUSED错误,但不是副本集中3台服务器的IP,而是我ISP范围内的IP。那么为什么连接后失败?它显示TCPConnectWrap.afterConnect,是否表示已经建立连接?
错误是这样的:
Connecting...
(node:1412) DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect.
Error: { Error: connect ECONNREFUSED 125.235.4.59:27017
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1104:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '125.235.4.59',
port: 27017 }
修改:
我当前的解决方法是直接连接到主服务器,而没有copysetset = rs0,但是,这不是理想的方式。
答案 0 :(得分:0)
我发现了问题所在。在云上的一组计算机上创建副本集时,服务器的地址为服务器名称,只有同一服务器LAN上的其他计算机才能知道。在office的localhost上,没有这样的服务器名称。
解决方法1:
解决方法2: