Verbindung zu MongoDB errno 111 abgelehnt

78

Ich habe einen Linode-Server mit Ubuntu 12.04 LTS und einer MongoDB-Instanz (Dienst wird ausgeführt und kann lokal eine Verbindung herstellen), zu der ich keine Verbindung von einer externen Quelle herstellen kann.

Ich habe diese beiden Regeln zu meinen IP-Tabellen hinzugefügt, wobei <IP-Adresse> der Server ist, von dem aus ich eine Verbindung herstellen möchte (wie in dieser MongoDB-Referenz beschrieben ):

iptables -A INPUT -s < ip-address > -p tcp --destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -d < ip-address > -p tcp --source-port 27017 -m state --state ESTABLISHED -j ACCEPT

Und ich sehe die Regel in meiner IP-Tabelle, die Verbindungen auf 27017 zu und von <IP-Adresse> zulässt. Wenn ich jedoch versuche, eine Verbindung von <IP-Adresse> zu meiner Mongo-Datenbank mit einem Befehl wie dem folgenden herzustellen:

mongo databasedomain/databasename -u username -p password

Ich erhalte diesen Fehler:

2014-07-22T23:54:03.093+0000 warning: Failed to connect to databaseserverip:27017, reason: errno:111 Connection refused 2014-07-22T23:54:03.094+0000 Error: couldn't connect to server < ip address >:27017 (databaseserverip), connection attempt failed at src/mongo/shell/mongo.js:148 exception: connect failed

Jede Hilfe wird sehr geschätzt !!!! Vielen Dank!!!

dbcooper
quelle
Bist du sicher, dass der andere Mongod läuft? Können Sie sich lokal damit verbinden?
Sammaye
mongod läuft lokal und ja, ich kann lokal verbinden.
dbcooper

Antworten:

125

Vielen Dank für die Hilfe an alle!

Es stellt sich heraus, dass es ein iptable Konflikt war. Zwei Regeln, die den offenen Port auflisten (was zu einem geschlossenen Port führte).

Einer der Kommentare von aka und ein anderer von manu2013 waren jedoch Probleme, auf die ich ohne den Konflikt gestoßen wäre.

Damit! Denken Sie immer daran, die /etc/mongod.confDatei zu bearbeiten und festzulegen bind_ip = 0.0.0.0, um externe Verbindungen herzustellen.

Stellen Sie außerdem sicher, dass Ihre iptable keine widersprüchlichen Regeln für den gewünschten Port mongo enthält (siehe Link auf der Website von mongodb , um Ihre iptables ordnungsgemäß einzurichten).

dbcooper
quelle
1
Oder verwenden Sie einfach 127.0.0.1 im connectionString anstelle von localhost und stellen Sie eine interne Verbindung her ...
Stefan Steiger
7
Vergessen Sie nicht zu machensudo service mongod restart
mqklin
9
Nicht bind_ip = 0.0.0.0in der Produktion machen !!!! Oder Sie werden Ihren Server öffentlich
zugänglich machen
@vinyll Sie sollten sich dann mit UFW (Firewall) auf bestimmte IPs beschränken
Raz
47

Versuche Folgendes:

sudo rm /var/lib/mongodb/mongod.lock
sudo service mongodb restart
manu2013
quelle
3
Kein Glück. Immer noch der Verbindungsfehler. Danke für den Versuch.
dbcooper
3
Muss Ihr MongoD-Server alle Schnittstellen abhören? 2.6.x ist standardmäßig so eingestellt, dass nur localhost abgehört wird. Sie können dies mit "netstat -an | grep 27017" bestätigen und es sollte angezeigt werden, an welche IP-Adressen der Mongod gebunden ist.
Aks
2
Stellen Sie sicher, dass in Ihrer Konfigurationsdatei mongodb.conf die Einstellung bindIp (bind_ip für frühere Versionen) so eingestellt ist, dass alle Schnittstellen abgehört werden, indem Sie den Wert 0.0.0.0 zuweisen. Standardmäßig hört es nur auf localhost, da der Standardwert 127.0.0.1 ist.
manu2013
Manchmal müssen Sie die mongodb-<port>.sockDatei entfernen . in meinem Fall befindet es sich im Ordner / tmp
Matan Tubul
44

Diese Befehle haben das Problem für mich behoben.

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair
sudo service mongod start
sudo service mongod status

Wenn Sie sich hinter dem Proxy befinden, verwenden Sie: -
export http_proxy = "http: // Benutzername: [email protected]: port /"
export https_proxy = "http: // Benutzername: [email protected]: port /"

Referenz: https://stackoverflow.com/a/24410282/4359237

sk1pro99
quelle
Wenn ich diesen Befehl ausführe, werden die Daten entfernt, die ich in der Datenbank gespeichert habe
c74ckds
@devend Es sollte nicht als Reparaturbefehl ausgeführt werden, der den Reparaturbefehl für alle Datenbanken ausführt. RepairDatabase: Überprüft und repariert Fehler und Inkonsistenzen bei der Datenspeicherung. RepairDatabase ist analog zu einem fsck-Befehl für Dateisysteme. Referenz
sk1pro99
16

Für Ubuntu Server 15.04 und 16.04 müssen Sie nur diesen Befehl ausführen

sudo apt-get install --reinstall mongodb
Techfano
quelle
8

Ich hatte kein /data/dbVerzeichnis. Ich habe eine erstellt und eine chmod 777Erlaubnis gegeben und es hat bei mir funktioniert

Seadon Francis Pinto
quelle
3

Eine andere Möglichkeit besteht darin, Ihre Datenbank einfach so zu reparieren (Hinweis: Das Verzeichnis db0 sollte zuerst vorab erstellt werden):

mongod --dbpath /var/lib/mongodb/ --repairpath /var/lib/mongodb/db0

Dies ist auch in Produktionsumgebungen eine akzeptable Option ...

Ostati
quelle
2

Ich hatte auch das gleiche Problem. Erstellen Sie ein Verzeichnis in dbpath. In meinem Fall gab es kein Verzeichnis in / data / db. Also habe ich eines erstellt. Jetzt funktioniert es. Stellen Sie sicher, dass Sie diesem Verzeichnis die Berechtigung erteilen.

Susampath
quelle
2

Für mich war es der richtige Weg, den Besitz von / var / lib / mongodb und /tmp/mongodb-27017.sock in mongodb zu ändern.

Mach einfach:

sudo chown -R mongodb:mongodb /var/lib/mongodb

und dann:

sudo chown mongodb:mongodb /tmp/mongodb-27017.sock

und starten oder starten Sie den Mongodb-Server neu:

sudo systemctl start mongod

oder

sudo systemctl restart mongod

und überprüfen Sie den Status

sudo systemctl status mongod
kodahScripts
quelle
1

In meinem Fall war die vorherige Version 3.2. Ich habe ein Upgrade auf 3.6 durchgeführt, aber die Datendateien waren nicht mit der neuen Version kompatibel. Daher habe ich alle Datendateien entfernt, da sie für mich und ihre Werke nicht verwendbar waren.

Sie können Protokolle mit überprüfen /var/log/mongodb

Kamal Kumar
quelle
MongoDB sollte sukzessive auf jede Hauptversion aktualisiert werden, bis Sie das Ziel erreichen. In diesem Fall müssen Sie zuerst ein Upgrade auf 3.4 durchführen und außerdem featureCompatibilityVersion konfigurieren: docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone Auf diese Weise müssen Sie Ihre Datendateien nicht entfernen Dies ist absolut keine Option, wenn Sie eine große Datenbank haben.
Sezanzeb
1

Ich folge den Anweisungen dieses Tutorials zur Installation

So installieren Sie MongoDB unter Ubuntu 16.04

Ich hatte den gleichen Fehler. Schließlich fand ich heraus, dass ich die Portnummer einstellen musste

Die Standardportnummer für den Befehl mongo lautet 27017

Die Standardportnummer in mongo.conf ist jedoch 29999

Freiheit
quelle
1

Das hat den Trick für mich getan

sudo service mongod restart
Avin Mathew
quelle
0

Obwohl der Port geöffnet ist, überwacht MongoDB derzeit nur die lokale Adresse 127.0.0.1. Fügen Sie der Datei mongod.conf die öffentlich routbare IP-Adresse Ihres Servers hinzu, um Remoteverbindungen zuzulassen .

Öffnen Sie die MongoDB-Konfigurationsdatei in Ihrem Editor:

sudo nano /etc/mongodb.conf

Fügen Sie die IP-Adresse Ihres Servers zum bindIP-Wert hinzu:

...
logappend=true

bind_ip = 127.0.0.1,your_server_ip
#port = 27017

...

Beachten Sie, dass sich jetzt jeder, der den Benutzernamen und das Kennwort hat, bei Ihrer Datenbank anmelden kann. Sie möchten dies vermeiden, indem Sie die Verbindung nur für bestimmte IP-Adressen einschränken. Dies kann mithilfe der Firewall erfolgen (Informationen zum UFW-Dienst bei Google). Aber kurz gesagt sollte dies ungefähr so ​​sein:

sudo ufw allow from YOUR_IP to any port 27017
Raz
quelle