奇怪的MongoDB连接问题仅在本地主机上

时间:2019-05-02 05:50:42

标签: node.js database mongodb error-handling connection

我有3台服务器,它们运行MongoDB副本集,1个主服务器,1个辅助服务器,1个仲裁器。而且我在连接到此副本集时遇到问题。经过在本地主机和备用服务器上运行的test.js文件的测试。

  • 从本地主机(节点6.5.0)连接:确定
  • 从本地主机(节点10.15.1)连接:失败
  • 从备用服务器(节点6.5.0)连接:确定
  • 从备用服务器(节点10.15.1)连接:确定

这是我的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,但是,这不是理想的方式。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。在云上的一组计算机上创建副本集时,服务器的地址为服务器名称,只有同一服务器LAN上的其他计算机才能知道。在office的localhost上,没有这样的服务器名称。

解决方法1:

  • 仅连接到主服务器或辅助服务器

解决方法2:

  • 编辑/ etc / hosts文件(或c:\ windows \ system32 \ drivers \ etc \ hosts)
  • 将服务器名称指向相应的IP