web-dev-qa-db-fra.com

Comment définir mongod.conf bind_ip avec plusieurs adresses IP

Je suis un débutant pour la configuration de l'environnement du serveur et de mongoDB. Cela peut sembler quelque chose de très simple, cependant, j'ai vraiment besoin de votre aide.

J'essaie de me connecter à ma machine virtuelle, qui exécute l'instance mongodb à partir de la machine locale, qui, à mon avis, devrait être similaire à l'environnement de production lorsque je l'exécute sur un serveur distant séparé.

L'environnement est comme suit:

  • IP privée pour la machine virtuelle: 192.168.184.155

  • Adresse IP publique de la machine locale et de la machine virtuelle: 96.88.169.145


J'ai changé le fichier bind_ip in /etc/mongod.conf de

bind_ip = 127.0.0.1

à

bind_ip = 127.0.0.1,192.168.184.155,96.88.169.145

Après avoir redémarré le service mongod, ni la machine virtuelle ni la machine locale ne peuvent accéder à mongodb via la commande mongodb, ce qui me donne l'erreur suivante.

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

Cependant, si je change le 

bind_ip = 192.168.184.155

et redémarrez le service, cela fonctionne et je peux accéder en utilisant mongo à partir de ma machine locale. Il semble juste ne pas fonctionner avec plusieurs adresses IP. J'ai essayé de regarder dans le document mongodb, cependant, ils mentionnent que bind_ip prend une liste séparée par des virgules, ce qui m'a vraiment dérouté.

Merci d'avance pour votre aide.

32
yeelan

Envelopper les Ips séparés par des virgules avec des supports fonctionne dans Mongo 3.2.7 pour moi:

bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
51
Joe Cheng

Vous pouvez le faire en:

bindIp: [172.31.60.184,127.0.0.1]

N'oubliez pas de ne pas mettre d'espace après la virgule.

19
pungoyal

J'exécute la version 3.6 sur SUSE 12.x et je rencontrais des problèmes d'utilisation de listes IP séparées par des virgules. J'ai résolu le problème par bindIp: 0.0.0.0

5
jprism

Merci pour @wdberkeley et @anhlc ont apporté la réponse.

J'ai consulté le fichier journal sous /var/log/mongodb/mongod.log. Cela montre la raison du problème.

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

Donc, le fichier mongo.conf est sensible à l’espace, que j’ai ajouté et que j’aurais dû remarquer. De plus, comme l'a souligné @anhlc, 96.88.169.145 n'est pas une adresse IP valide pour la machine virtuelle. Alors que l'on contribue également à l'erreur.

Un grand merci pour votre aide! J'espère que cela pourra aider si quelqu'un rencontre le même problème.

3
yeelan

En mongo 3. *,

utiliser un support tel que

net:
    port: 27017
    bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
2
KyungHoon Kim

Dans le cas de mongodb version 3.6 sur mon Ubuntu16.04 LTS, il n’est pas nécessaire de mettre les adresses IP entre crochets "[]". Supprime l'espace après la virgule résout le problème de connexion échoué dans le journal de mongod (/var/log/mongodb/mongod.log)

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

Après avoir modifié le bindIp: 127.0.0.1 en bindIp: 127.0.0.1,xxx.xxx.xxx.xxx (notez qu'il n'y a pas de virgule entre les IP) , l'IP de l'hôte écoute comme suit:

xxx@xxxx:/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 
1
Bruce Yo

Dans mon cas, la solution consistait à mettre les adresses IP séparées par des virgules et sans espace. 

bind_ip=192.168.2.29,127.0.0.1
#port = 27017

Cela a fonctionné:

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'.

Mongo 3.6.3 ici. 

mongod --version db version v3.6.3 version git: 9586e557d54ef70f9ca4b43c26892cd55257e1a5 version OpenSSL: OpenSSL 1.1.0g 2 nov. 2017 allocateur: tcmalloc modules.: .environnement: non. distarch: x86_64 target_Arch: x86_64

J'ai ajouté avec succès une deuxième adresse IP sur mon service version 3.2 en utilisant une virgule, aucun espace et un nom de domaine complet

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

Avec la version suivante de MongoDB: MongoDB Shell version v3.6.10

Problème de reproduction: Lorsque [127.0.0.1, xxx.xxx.xxx.xxx] est utilisé, nous obtenons l’erreur suivante ..__ L'option scalaire 'net.bindIp' doit être une valeur unique essayez 'mongod --help' pour plus d'informations

Analyse C'est parce que, selon la documentation MongoDB: https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIP

net.bindIP est de type " string ".

Solution pour relier plusieurs adresses IP

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

Remarque: pas d'espaces après les virgules

0
Sachin PC