Подключение к удаленной реплике, установленной из оболочки Монго?
Я создал набор из 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.