Невозможно подключиться к реплике Mon go 3.6, используя Node.js - PullRequest
0 голосов
/ 24 января 2020

У меня есть настройка на реплику mon go 3.6 на машине с IP 192.168.1.175 с командой ниже,

$ sudo mongod --port 27017 --replSet "rs0" --bind_ip_all --dbpath ~/data/db/rs1 & 
$ sudo mongod --port 27018 --replSet "rs0" --bind_ip_all --dbpath ~/data/db/rs2 & 
$ sudo mongod --port 27019 --replSet "rs0" --bind_ip_all --dbpath ~/data/db/rs3

$ rs.initiate( {
  _id : "rs0",
  members: [
  { _id: 0, host: "localhost:27017" },
  { _id: 1, host: "localhost:27017" },
  { _id: 2, host: "localhost:27017" }
 ]
})

Так что я предполагаю, что, поскольку я использую --bind_ip_all, я могу также подключите эту реплику с удаленного компьютера.

Теперь я пытаюсь получить доступ к 192.168.1.175 с компьютера с IP 192.168.1.160, ниже приведены выходные данные

emgda@ubuntu:~$ mongo 'mongodb://mongomachine:27017,mongomachine:27018,mongomachine:27019/?replicaSet=rs0' --quiet
rs0:PRIMARY> ^C

Ниже приведен маленький Node.js код для подключения к тому же мону go URL, но я получаю сообщение об ошибке.

const MongoClient = require("mongodb").MongoClient;

MongoClient.connect('mongodb://192.168.1.175:27018,192.168.1.175:27017,192.168.1.175:27019/emgda?replicaSet=rs0', { useUnifiedTopology: true })
  .then(client => {
    console.log("Connected correctly to server");
    // specify db and collections
    const db = client.db("emgda");
    const collection = db.collection("aggregatehourly");
  })
  .catch(err => {
    console.error(err);
});

Ниже приведен вывод

{ MongoServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
    at Timeout.waitQueueMember.timer.setTimeout [as _onTimeout] (/home/emgda/Documents/mongo-connection/node_modules/mongodb/lib/core/sdam/topology.js:448:30)
    at ontimeout (timers.js:436:11)
    at tryOnTimeout (timers.js:300:5)
    at listOnTimeout (timers.js:263:5)
    at Timer.processTimers (timers.js:223:10)
  name: 'MongoServerSelectionError',
  reason:
   TopologyDescription {
     type: 'ReplicaSetNoPrimary',
     setName: 'rs0',
     maxSetVersion: 1,
     maxElectionId: null,
     servers:
      Map {
        'localhost:27017' => [ServerDescription],
        'localhost:27018' => [ServerDescription],
        'localhost:27019' => [ServerDescription] },
     stale: false,
     compatible: true,
     compatibilityError: null,
     logicalSessionTimeoutMinutes: null,
     heartbeatFrequencyMS: 10000,
     localThresholdMS: 15,
     commonWireVersion: 6 },
  [Symbol(mongoErrorContextSymbol)]: {} }

При запуске команды на пн go оболочка на локальной машине, я получаю это как вывод,

rs0:PRIMARY> rs.status()
{
        "set" : "rs0",
        "date" : ISODate("2020-01-24T06:15:26.540Z"),
        "myState" : 1,
        "term" : NumberLong(10),
        "heartbeatIntervalMillis" : NumberLong(2000),
        "optimes" : {
                "lastCommittedOpTime" : {
                        "ts" : Timestamp(1579846526, 1),
                        "t" : NumberLong(10)
                },
                "readConcernMajorityOpTime" : {
                        "ts" : Timestamp(1579846526, 1),
                        "t" : NumberLong(10)
                },
                "appliedOpTime" : {
                        "ts" : Timestamp(1579846526, 1),
                        "t" : NumberLong(10)
                },
                "durableOpTime" : {
                        "ts" : Timestamp(1579846526, 1),
                        "t" : NumberLong(10)
                }
        },
        "members" : [
                {
                        "_id" : 0,
                        "name" : "localhost:27017",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 294,
                        "optime" : {
                                "ts" : Timestamp(1579846526, 1),
                                "t" : NumberLong(10)
                        },
                        "optimeDate" : ISODate("2020-01-24T06:15:26Z"),
                        "electionTime" : Timestamp(1579846244, 1),
                        "electionDate" : ISODate("2020-01-24T06:10:44Z"),
                        "configVersion" : 1,
                        "self" : true
                },
                {
                        "_id" : 1,
                        "name" : "localhost:27018",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 282,
                        "optime" : {
                                "ts" : Timestamp(1579846516, 1),
                                "t" : NumberLong(10)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1579846516, 1),
                                "t" : NumberLong(10)
                        },
                        "optimeDate" : ISODate("2020-01-24T06:15:16Z"),
                        "optimeDurableDate" : ISODate("2020-01-24T06:15:16Z"),
                        "lastHeartbeat" : ISODate("2020-01-24T06:15:24.871Z"),
                        "lastHeartbeatRecv" : ISODate("2020-01-24T06:15:25.718Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "localhost:27017",
                        "configVersion" : 1
                },
                {
                        "_id" : 2,
                        "name" : "localhost:27019",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 273,
                        "optime" : {
                                "ts" : Timestamp(1579846516, 1),
                                "t" : NumberLong(10)
                        },
                        "optimeDurable" : {
                                "ts" : Timestamp(1579846516, 1),
                                "t" : NumberLong(10)
                        },
                        "optimeDate" : ISODate("2020-01-24T06:15:16Z"),
                        "optimeDurableDate" : ISODate("2020-01-24T06:15:16Z"),
                        "lastHeartbeat" : ISODate("2020-01-24T06:15:24.894Z"),
                        "lastHeartbeatRecv" : ISODate("2020-01-24T06:15:24.702Z"),
                        "pingMs" : NumberLong(0),
                        "syncingTo" : "localhost:27018",
                        "configVersion" : 1
                }
        ],
        "ok" : 1,
        "operationTime" : Timestamp(1579846526, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1579846526, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}

Вопрос:

  1. Почему я не могу подключиться к п go набор реплик с полным URL-адресом?
  2. Как я могу подключиться, предоставив только 1 IP-адрес?

Любые рекомендации будут высоко оценены.

1 Ответ

0 голосов
/ 24 января 2020

Наконец, я получил решение для этой проблемы,

Пока мы запускаем набор реплик, нам нужно убедиться, что нам не нужно упоминать localhost в конфигурации участника (см. Ниже конфигурацию ). В этом случае другие удаленные серверы не смогут получить доступ к базе данных, даже если вы запустите mon go server с помощью команды --bind_ip 0.0.0.0,:: ИЛИ --bind_all_ip.

Ниже приведены правильные и неправильные конфигурации.

НЕПРАВИЛЬНО

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "localhost:27017" },
      { _id: 1, host: "localhost:27017" },
      { _id: 2, host: "localhost:27017" }
   ]
})

ПРАВИЛЬНО [все реплики на одном компьютере]

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "192.168.1.175:27017" },
      { _id: 1, host: "192.168.1.175:27018" },
      { _id: 2, host: "192.168.1.175:27019" }
   ]
})

ПРАВИЛЬНО [все реплики на другом компьютере]

rs.initiate( {
   _id : "rs0",
   members: [
      { _id: 0, host: "192.168.1.175:27017" },
      { _id: 1, host: "192.168.1.176:27018" },
      { _id: 2, host: "192.168.1.177:27019" }
   ]
})
...