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.
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]
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.
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
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.
En mongo 3. *,
utiliser un support tel que
net:
port: 27017
bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
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
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
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