Странная проблема с подключением MongoDB только на локальном хосте - PullRequest
0 голосов
/ 02 мая 2019

У меня есть 3 сервера, на которых выполняется репликационный набор MongoDB, 1 основной, 1 дополнительный, 1 арбитр. И у меня проблема с подключением к этому репликасу. Протестировано с файлом test.js, который запускается на локальном хосте и на резервном сервере.

  • Соединение с локального узла, узел 6.5.0: ОК
  • Соединение с локального хоста, узел 10.15.1: FAILED
  • Соединение с запасного сервера, узел 6.5.0: ОК
  • Соединение с запасного сервера, узел 10.15.1: OK

Вот мой файл 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, но не по IP-адресу 3 серверов в репликационном наборе, это 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 }

Редактировать

Мой текущий способ обхода - подключиться напрямую к основному серверу без replicaset = rs0, однако это нежелательный способ.

1 Ответ

0 голосов
/ 15 июля 2019

Я обнаружил проблему. При создании набора реплик на группе компьютеров в облаке адресами серверов являются имена серверов , которые известны только другим машинам в той же локальной сети сервера. На локальном хосте в офисе таких имен серверов нет.

Обход 1:

  • Подключение только к первичному или вторичному серверу

Обходной путь 2:

  • Редактировать файл / etc / hosts (или c: \ windows \ system32 \ drivers \ etc \ hosts)
  • Укажите имя сервера на соответствующий IP-адрес
...