Подключение к удаленной реплике, установленной из оболочки Монго?

Я создал набор из 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-адрес машины с именем хоста машины.

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

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

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

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

Спасибо

2 ответа

При подключении к реплике установите свой клиент / драйвер (например, mongo shell) использует детали, настроенные для вашего набора реплик, как определено в 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.

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

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

Другие вопросы по тегам