Подключение к удаленному набору реплик из оболочки mongo?

Я создал набор реплик из 3 участников в облаке Amazon. Я установил все необходимые настройки брандмауэра и конфигурации mongo. Ниже приведена конфигурация моего набора реплик:

{
    "_id" : "rs1",
    "version" : 3,
    "protocolVersion" : NumberLong(1),
    "members" : [
            {
                    "_id" : 1,
                    "host" : "ip-172-31-16-84:27017",
                    "arbiterOnly" : false,
                    "buildIndexes" : true,
                    "hidden" : false,
                    "priority" : 1,
                    "tags" : {

                    },
                    "slaveDelay" : NumberLong(0),
                    "votes" : 1
            },
            {
                    "_id" : 2,
                    "host" : "ip-172-31-23-212:27017",
                    "arbiterOnly" : false,
                    "buildIndexes" : true,
                    "hidden" : false,
                    "priority" : 1,
                    "tags" : {

                    },
                    "slaveDelay" : NumberLong(0),
                    "votes" : 1
            },
            {
                    "_id" : 3,
                    "host" : "ip-172-31-14-196:27017",
                    "arbiterOnly" : false,
                    "buildIndexes" : true,
                    "hidden" : false,
                    "priority" : 1,
                    "tags" : {

                    },
                    "slaveDelay" : NumberLong(0),
                    "votes" : 1
            }
    ],
    "settings" : {
            "chainingAllowed" : true,
            "heartbeatIntervalMillis" : 2000,
            "heartbeatTimeoutSecs" : 10,
            "electionTimeoutMillis" : 10000,
            "getLastErrorModes" : {

            },
            "getLastErrorDefaults" : {
                    "w" : 1,
                    "wtimeout" : 0
            },
            "replicaSetId" : ObjectId("5720fb585ef3baca32efe765")
    }
}

ПРИМЕЧАНИЕ. Я создал набор реплик, используя общедоступный IP-адрес машины с именем хоста.

я использую приведенную ниже команду для подключения к набору реплик с любого из этих 3 компьютеров с набором реплик, и я подключаюсь к основному набору реплик.

mongo --host  "rs1/ip-172-31-16-84:27017"

Но когда я использую ту же команду с любой другой машины (предположим, с моей локальной машины) не в той же локальной сети. Команда завершается с ошибкой ниже:

C:\Users\gur35948>mongo --host "rs1/52.221.230.236:27017"
MongoDB shell version: 3.0.6
connecting to: rs1/52.221.230.236:27017/test
2016-04-28T11:54:02.851+0530 I NETWORK  starting new replica set monitor for     replica set rs1 with seeds 52.221.230.236:27017
2016-04-28T11:54:02.853+0530 I NETWORK  [ReplicaSetMonitorWatcher] starting
2016-04-28T11:54:03.043+0530 I NETWORK  changing hosts to rs1/ip-172-31-14-196:27017,ip-172-31-16-84:27017,ip-172-31-23-212:27017 from rs1/52.221.230.236:27017
2016-04-28T11:54:13.689+0530 I NETWORK  [ReplicaSetMonitorWatcher] getaddrinfo("ip-172-31-14-196") failed: errno:11001 No such host is known.
2016-04-28T11:54:14.335+0530 I NETWORK  getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.
2016-04-28T11:54:16.682+0530 I NETWORK  getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.
2016-04-28T11:54:17.505+0530 I NETWORK  getaddrinfo("ip-172-31-14-196") failed:errno:11001 No such host is known.
2016-04-28T11:54:17.505+0530 W NETWORK  No primary detected for set rs1
2016-04-28T11:54:17.511+0530 E QUERY    Error: ReplicaSetMonitor no master found for set: rs1
at connect (src/mongo/shell/mongo.js:181:14)
at (connect):1:6 at src/mongo/shell/mongo.js:181

Монго не может разрешить имя хоста, используемое в наборе реплик, из-за разницы в сети. Я не использовал общедоступный IP-адрес, потому что это плохая практика, я думаю.

Итак, наконец, вопрос в том, как мне подключиться к этому удаленному набору реплик??

Спасибо


person Furious    schedule 28.04.2016    source источник


Ответы (2)


При подключении к набору реплик ваш клиент/драйвер (например, оболочка mongo) использует детали, настроенные для вашего набора реплик, как определено в rs.conf():

  • имена хостов должны преобразовываться в IP-адреса
  • соединения устанавливаются с использованием настроенного имени хоста/IP/порта для каждого члена набора реплик.

Следующая ошибка, в частности, указывает на то, что имя хоста не может быть разрешено вашим mongo клиентом:

2016-04-28T11:54:13.689+0530 I NETWORK [ReplicaSetMonitorWatcher] getaddrinfo("ip-172-31-14-196") failed: errno:11001 No such host is known. 2016-04-28T11:54:14.335+0530 I NETWORK getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.

Имя хоста ip-172-31-16-84 предполагает, что IP-адрес хоста будет 172.31.16.84, что является немаршрутизируемой частной сетью. адрес.

Невозможно подключиться к внутреннему IP-адресу из-за пределов сети.

Чтобы безопасно подключиться к развертыванию, вам потребуется открыть SSH или VPN-соединение с частной сетью, в которой находится ваш набор реплик, и запустить оболочку mongo из этой частной сети.

Для получения дополнительной информации о защите развертывания см. контрольный список безопасности MongoDB.

person Chris Cunningham    schedule 26.05.2016

Как насчет использования туннеля SSH для подключения к одному из серверов, а затем использования оболочки mongo для подключения к локальному хосту?

Теперь это очень легко настроить, защитить и поддерживать в большинстве графических интерфейсов MongoDB.

person Henri-Maxime Ducoulombier    schedule 26.05.2016