Ich habe einen REST-Service in node.js mit Restify und Mongoose und eine mongoDB mit einer Sammlung mit etwa 30.000 Dokumenten normaler Größe. Ich habe meinen Knotendienst über pmx und pm2 ausgeführt.
Gestern fing der Knoten plötzlich an, Fehler mit der Meldung "MongoError: Topologie wurde zerstört" auszublenden, mehr nicht. Ich habe keine Ahnung, was damit gemeint ist und was dies möglicherweise ausgelöst haben könnte. Es gibt auch nicht viel zu finden, wenn Google dies sucht. Also dachte ich, ich würde hier fragen.
Nach dem heutigen Neustart des Knotendienstes sind die Fehler nicht mehr aufgetreten. Ich habe auch einen dieser Fehler in der Produktion und es macht mir Angst, dass dies zu einem bestimmten Zeitpunkt bei einem ziemlich wichtigen Teil des dort ausgeführten Setups passieren kann ...
Ich verwende die folgenden Versionen der genannten Pakete:
- Mungo: 4.0.3
- restify: 3.0.3
- Knoten: 0,10,25
Antworten:
Dies scheint zu bedeuten, dass die Verbindung Ihres Knotenservers zu Ihrer MongoDB-Instanz unterbrochen wurde, während versucht wurde, darauf zu schreiben.
Schauen Sie sich den Mongo-Quellcode an, der diesen Fehler generiert
Dies scheint nicht mit dem in den Kommentaren genannten Sails-Problem zu tun zu haben, da keine Upgrades installiert wurden, um den Absturz oder das "Update" auszulösen.
quelle
Ich weiß, dass Jasons Antwort akzeptiert wurde, aber ich hatte das gleiche Problem mit Mongoose und stellte fest, dass der Dienst, der meine Datenbank hostet , die folgenden Einstellungen empfiehlt, um die Verbindung von Mongodb in der Produktion aufrechtzuerhalten:
Ich hoffe, dass diese Antwort anderen Personen mit Fehlern "Topologie wurde zerstört" hilft.
quelle
Dieser Fehler ist darauf zurückzuführen, dass der Mongo-Treiber die Verbindung aus irgendeinem Grund unterbrochen hat (Server war beispielsweise ausgefallen).
Standardmäßig versucht Mungo 30 Sekunden lang, die Verbindung wiederherzustellen, hört dann auf, es erneut zu versuchen, und wirft Fehler für immer aus, bis sie neu gestartet werden.
Sie können dies ändern, indem Sie diese beiden Felder in den Verbindungsoptionen bearbeiten
Dokumentation der Verbindungsoptionen
quelle
server: {
usw. hinzuzufügen .In meinem Fall wurde dieser Fehler durch einen
db.close();
Abschnitt "Warten" innerhalb von "Async" verursacht.quelle
db.close
in einenthen
Block zu verschieben, richtig?db.close
in einenthen
Block hat für mich mit dem nativen MongoDB Node.js-Treiber hervorragend funktioniert.Nur eine kleine Ergänzung zu Gaafars Antwort, gab es mir eine Abwertungswarnung. Anstelle des Serverobjekts wie folgt:
Es kann auf das Objekt der obersten Ebene gehen. Nehmen Sie es einfach aus dem Serverobjekt und fügen Sie es wie folgt in das Optionsobjekt ein:
quelle
"Topologie wurde zerstört" kann durch das Trennen der Mungo verursacht werden, bevor Mongo-Dokumentindizes gemäß diesem Kommentar erstellt werden
Um sicherzustellen, dass alle Modelle ihre Indizes erstellt haben, bevor Sie die Verbindung trennen, können Sie:
quelle
Sebastians Kommentar zu Adriens Antwort braucht mehr Aufmerksamkeit, es hat mir geholfen, aber ein Kommentar könnte irgendwann ignoriert werden. Hier ist eine Lösung :
quelle
Ich hatte auch den gleichen Fehler. Schließlich stellte ich fest, dass mein Code einen Fehler enthält. Ich verwende den Lastausgleich für zwei NodeJS-Server, aktualisiere aber nur den Code eines Servers.
Ich ändere meinen Mongod-Server
from standalone to replication
, vergesse jedoch, das entsprechende Update für die Verbindungszeichenfolge durchzuführen , sodass dieser Fehler aufgetreten ist .Standalone-Verbindungszeichenfolge:
mongodb://server-1:27017/mydb
Replikationsverbindungszeichenfolge:mongodb://server-1:27017,server-2:27017,server-3:27017/mydb?replicaSet=myReplSet
Details hier: [Mongo Doc für Verbindungszeichenfolge]
quelle
Ich habe dies in der Umgebung von Kubernetes / Minikube + NodeJS + Mungo getroffen. Das Problem war, dass der DNS-Dienst eine Art Latenz hatte. Das Überprüfen von DNS ist bereit, mein Problem zu lösen.
(Die Zahlen in db_options sind willkürlich auf Stackoverflow und ähnlichen Sites zu finden.)
quelle
Hier, was ich getan habe, funktioniert es gut. Das Problem wurde behoben, nachdem die folgenden Optionen hinzugefügt wurden.
quelle
Sie müssen mongo neu starten, um den Topologiefehler zu beheben, und dann nur einige Optionen von mongoose oder mongoclient ändern, um dieses Problem zu beheben:
quelle
Ich habe diesen Fehler erhalten, als ich eine neue Datenbank in meiner MongoDb Compass Community erstellt habe. Das Problem war mit meinem Mongod, es lief nicht. Als Fix musste ich den Mongod-Befehl wie oben ausführen.
Nach dem Ausführen dieses Befehls konnte ich eine Datenbank erstellen.
Ich hoffe es hilft.
quelle
Ich hatte einige Zeit damit zu kämpfen - Wie Sie anderen Antworten entnehmen können, kann das Problem sehr unterschiedlich sein.
Der einfachste Weg, um herauszufinden, was die Ursache ist, besteht darin,
loggerLevel: 'info'
die Optionen zu aktivierenquelle
In meinem Fall wurde dieser Fehler durch eine identische Serverinstanz verursacht, auf der bereits Hintergrund ausgeführt wird.
Das Seltsame ist, als ich meinen Server ohne Vorankündigung startete, dass bereits einer läuft. Auf der Konsole wurde nichts angezeigt wie "Etwas verwendet Port xxx". Ich könnte sogar etwas auf den Server hochladen. Ich habe also ziemlich lange gebraucht, um dieses Problem zu lokalisieren.
Nachdem ich alle Anwendungen geschlossen hatte, die ich mir vorstellen kann, konnte ich den Prozess, der diesen Port verwendet, im Aktivitätsmonitor meines Mac immer noch nicht finden. Ich muss verwenden, um
lsof
zu verfolgen. Der Täter war nicht überraschend - es ist ein Knotenprozess. Mit der im Terminal angezeigten PID stellte ich jedoch fest, dass sich die Portnummer im Monitor von der von meinem Server verwendeten unterscheidet.Alles in allem kann das Beenden aller Knotenprozesse dieses Problem direkt lösen.
quelle
Ich habe dieses Problem gelöst durch:
quelle