У меня есть 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, однако это нежелательный способ.