Подтвердить что ты не робот

Как установить mongod.conf bind_ip с несколькими IP-адресами

Я новичок в настройке серверной среды и mongoDB. Это может показаться чем-то очень простым, однако мне действительно нужна ваша помощь.

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

Среда выглядит следующим образом:

  • Частный IP для виртуальной машины: 192.168.184.155

  • Открытый IP-адрес для локальной машины и виртуальной машины: 96.88.169.145


Я изменил bind_ip в файле /etc/mongod.conf из

bind_ip = 127.0.0.1

к

bind_ip = 127.0.0.1,192.168.184.155,96.88.169.145

После перезапуска службы mongod ни виртуальная машина, ни локальная машина не могут получить доступ к mongodb через команду mongodb и дать мне следующую ошибку.

MongoDB shell version: 3.0.1
connecting to: test
2015-03-17T16:02:22.705-0400 W NETWORK  Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-03-17T16:02:22.707-0400 E QUERY    Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
    at connect (src/mongo/shell/mongo.js:179:14)
    at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed

Однако, если я изменю

bind_ip = 192.168.184.155

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

Спасибо за вашу помощь заранее.

4b9b3361

Ответ 1

Оберните запятую-Ips с помощью скобок для mongo 3.2.7 для меня:

bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]

Ответ 2

Вы можете сделать это:

bindIp: [172.31.60.184,127.0.0.1]

Не забудьте не ставить пробел после запятой.

Ответ 3

Я запускаю 3.6 на SUSE 12.x и имел проблемы с использованием списков IP-адресов, разделенных запятыми. Я исправил проблему       bindIp: 0.0.0.0

Ответ 4

Спасибо за @wdberkeley и @anhlc подняли ключ.

Я просмотрел файл журнала в /var/log/mongodb/mongod.log. Он показывает причину неполадки.

2015-03-17T16:08:17.274-0400 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1, 192.168.184.155" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2015-03-17T16:08:17.332-0400 I NETWORK  [initandlisten] getaddrinfo(" 192.168.184.155") failed: Name or service not known

Таким образом, файл mongo.conf чувствителен к пространству, который я случайно добавил и должен был заметить. Также, как указывал @anhlc, 96.88.169.145 не является допустимым IP-адресом для виртуальной машины. Так что это также способствует ошибке.

Большое спасибо за вашу помощь! Надеюсь, это поможет, если кто-то столкнулся с одной и той же проблемой.

Ответ 5

В Mongo 3. *,

используйте скобу, например

net:
    port: 27017
    bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]

Ответ 6

Я успешно добавил второй ip в мою версию 3.2 с использованием запятой, без пробелов и FQDN

net:
  port: 27017
  bindIp: localhost,dev-2.office.sampleorg.com

Ответ 7

Случай в mongodb версии 3.6 на моем Ubuntu16.04 LTS заключается в том, что вам не нужно указывать IP-адреса в квадратных скобках "[]". Удалите пробел после запятой, чтобы решить проблему неудачного соединения в журнале mongod (/var/log/mongodb/mongod.log)

NETWORK  [initandlisten] getaddrinfo(" xxx.xxx.xxx.xxx") failed: Name or service not known

После изменения bindIp: 127.0.0.1 на bindIp: 127.0.0.1,xxx.xxx.xxx.xxx (не bindIp: 127.0.0.1,xxx.xxx.xxx.xxx запятую между IP-адресами), IP-адрес хоста прослушивается, как bindIp: 127.0.0.1,xxx.xxx.xxx.xxx ниже:

[email protected]:/var/log/mongodb$ sudo netstat -plnt |egrep mongod
tcp        0      0 xxx.xxx.xxx.xxx:27017   0.0.0.0:*               LISTEN      30747/mongod    
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      30747/mongod 

Ответ 8

В моем случае решением было поставить IP через запятую и без пробелов.

bind_ip=192.168.2.29,127.0.0.1
#port = 27017

Вот так сработало:

2018-10-02T07:49:27.952+0000 I CONTROL  [initandlisten] options: { config: "/etc/mongodb.conf", net: { bindIp: "192.168.2.29,127.0.0.1", unixDomainSocket: { pathPrefix: "/run/mongodb" } }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongodb.log" } } 2018-10-02T07:49:27.954+0000 I -    [initandlisten] Detected data files in /var/lib/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.

Монго 3.6.3 здесь.

mongod --version db версия v3.6.3 git версия: 9586e557d54ef70f9ca4b43c26892cd55257e1a5 версия OpenSSL: OpenSSL 1.1.0g 2 ноября 2017 г. Распределитель: tcmalloc модули: нет среда сборки: distarch: x86_64 target_arch: x86_64

Ответ 9

В следующей версии MongoDB: версия оболочки MongoDB v3.6.10

Воспроизведение проблемы: При использовании [127.0.0.1, xxx.xxx.xxx.xxx] мы получаем следующую ошибку. Скалярная опция 'net.bindIp' должна быть одним значением, попробуйте 'mongod --help' для получения дополнительной информации

Анализ Это происходит потому, что, согласно документации MongoDB: https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIP

net.bindIP имеет тип " строка ".

Решение для привязки нескольких IP-адресов

bindIp: "127.0.0.1,xxx.xxx.xxx.xxx"

Примечание: без запятых

Ответ 10

Правило bindIp с IP-адресами, разделенными запятыми, предназначено только для известных интерфейсов Ethernet или для правил 0.0.0.0 и 127.0.0.1. Вы можете использовать только IP-адреса ваших системных сетевых карт. Если этот список содержит неизвестный IP-адрес, то есть IP-адрес другой системы, ваш экземпляр MongoDb не будет перезагружен, и, следовательно, вы не сможете подключиться. Чтобы проверить, работает ли ваш экземпляр MongoDb, выполните следующее:

$ sudo systemctl status mongod

Если вы хотите сделать свой экземпляр MongoDb доступным для других систем в вашей сети, вам нужно привязать локальный IP-адрес, связанный с частной сетью. Чтобы легко определить конфигурацию сетевого интерфейса, просто запустите ifconfig из командной строки:

$ ifconfig

Это перечислит все доступные IP-адреса, которые вы можете использовать в правиле bindIp. Скорее всего, используемый вами IP-адрес 96.88.169.145 не является действительным IP-адресом или неизвестен вашей системе.

Ответ 11

Ubuntu 16.04 → версия оболочки MongoDB: 2.6.10

Для меня работает следующее:

bind_ip = [127.0.0.1; XXXX]

Обратите внимание, у меня есть ; нет ,

Ответ 12

Если все, что вы хотите сделать, - это подключиться к этой машине по сети, которую вы НЕ должны изменить значение bind_ip.

В вашем случае вам необходимо выполнить следующие шаги.

  • Настройка удаленного компьютера для блокировки всех подключений к порту 27017
  • Включить удаленный компьютер для приема соединений только с вашего локального компьютера.
  • Установить учетные данные с помощью MongoDB
  • Подключиться к клиенту с помощью учетных данных.

Если вы не знаете, как выполнить любой из этих шагов. Просмотрите сообщение в блоге, которое я написал, который более подробно описывает, как это сделать.

Сообщение в блоге

Надеюсь, что это поможет.