Ich habe ein MongoReplikat mit ein paar Secondaries. Eine Box, die eine sekundäre Instanz hostet, ist abgestürzt und hat die Datenbank verloren.
Ich habe die sekundäre MongoInstanz erneut gestartet und jetzt steckt sie mehr als 12 Stunden in STARTUP2 fest. Macht das Sinn ? Die Dokumentation sagt, Mongodass sie sich für kurze Zeit in STARTUP2 befinden sollte, bevor sie in den RECOVERING-Status wechselt
Was bedeutet STARTUP2 genau? Kopiert es die Datenbank von der primären? Wie kann ich das überprüfen (vorausgesetzt, der Mongo läuft unter Linux)?
Die Antwort von Eoinbrazil ist teilweise falsch. Ein neuer Knoten kann sich längere Zeit in STARTUP2 befinden. Der Link der geposteten sagt:
Jedes Mitglied eines Replikatsatzes wechselt in den Status STARTUP2, sobald mongod das Laden der Konfiguration dieses Mitglieds abgeschlossen hat. Zu diesem Zeitpunkt wird es aktives Mitglied des Replikatsatzes. Das Mitglied entscheidet dann, ob eine erste Synchronisierung durchgeführt werden soll oder nicht. Wenn ein Mitglied eine anfängliche Synchronisierung startet, bleibt das Mitglied in STARTUP2, bis alle Daten kopiert und alle Indizes erstellt wurden. Danach wechselt das Mitglied zu RECOVERING.
Ich verwalte eine 700-GB-Sammlung und wenn ich einen neuen Knoten hinzufüge, bleibt der STARTUP2-Status weit über 24 Stunden erhalten. Sie können jedoch weiterhin feststellen, ob etwas passiert, indem Sie beobachten, ob die Datenbank wächst. Sie können die Größe der Datenbank auf dem neuen Knoten mit sehen
show databases
Oder Sie können auch das Datenverzeichnis beobachten, um zu sehen, ob es noch wächst. (unter Linux mit den Befehlen ls, df, du, iotop, etc ....)
show databasesscheitert mitnot master and slaveOk=false
JDPeckham
Durch Betrachten der Protokolle können Sie den Fortschritt sehen. Zum Beispiel wird Folgendes angezeigt: [rsSync] Index Build: 2538000/22982417 11%
Daniel Benedykt
4
Der STARTUP2-Status bedeutet, dass der Knoten nicht abstimmen kann. Ein Mitglied eines RS tritt in diesen Zustand ein, sobald der MongoD-Prozess das Laden seiner Konfiguration abgeschlossen hat. In diesem Status hat das Mitglied Threads erstellt, um die internen Replikationsvorgänge zu verarbeiten. Der Status muss jedoch noch in "Wiederherstellen" und danach in "Sekundär" geändert werden (siehe [Status und Details in den Dokumenten]) .
Wenn sich Ihr Knoten länger als eine kurze Zeit in diesem Zustand befindet, tritt ein seltsames Verhalten auf. Ohne die Protokolle ist dies so gut wie unmöglich zu analysieren, um festzustellen, warum es nicht funktioniert. Wenn Sie rs.status () und db.printSlaveReplicationInfo () ausführen, erhalten Sie einige Details zum lokalen Bild auf dem Knoten.
Der normale Lösungsansatz besteht darin, den Knoten herunterzufahren, seine Datendateien (die Dateien im Datenbankpfad) zu löschen und neu zu starten. Dadurch wird der anfängliche Synchronisierungsprozess neu gestartet und es sollte zu SECONDARY übergegangen werden. Wenn es in STARTUP2 erneut stecken bleibt, müssen Sie sich die Protokolle ansehen, um weitere Informationen darüber zu erhalten, warum - es gibt eine Reihe von Ursachen, aber eine, die auftreten kann, ist ein flockiges Netzwerk oder ein lokaler Ressourcenkonflikt.
Es ist zu beachten, dass der Knoten während einer anfänglichen Synchronisierung in STARTUP2 verbleibt. Je nach Menge der zu synchronisierenden Daten kann dies eine beträchtliche Zeitdauer (möglicherweise Tage) sein.
Vielen Dank. Wir haben die Daten entfernt und den Mongo neu gestartet. Es befindet sich noch in STARTUP2. Es sieht so aus, als ob der Mongo arbeitet. Es verbraucht CPU und wie ich in db.statsder Datenbank sehe, wächst. Das Protokoll sagt, dass einige Objekte cloned. Ich suche noch nach möglichen Ursachen für dieses Problem.
Michael
1
Wenn dies immer noch ein Problem ist, möchten Sie möglicherweise nur eine Kopie von einem anderen Knoten erstellen (siehe diese Prozedur - docs.mongodb.org/manual/tutorial/resync-replica-set-member/… ). Wenn Sie die Protokollhervorhebungen und Details zu der von Ihnen verwendeten Version anhängen können, weist dies möglicherweise auf eine Ursache hin, dies ist jedoch auch ein ungewöhnliches Verhalten. Haben Sie versucht, zwischen den Knoten zu pingen, um zu sehen, wie die Netzwerklatenz aussieht?
Eoinbrazil
Mongo 2.4.6 pingzwischen den Gastgebern ist in Ordnung.
Michael
Wie sind die Ping-Zeiten, da es sich möglicherweise um zeitweise auftretende Netzwerkprobleme handelt? In diesem Fall ist es viel einfacher, wenn Sie einige der Protokollausgaben hinzufügen, da dies kein Standardverhalten ist und die Protokolle die Hauptursache für den Versuch sind, zu bestimmen, was genau geschieht.
Eoinbrazil
Ich fürchte, ich kann die Protokolle hier nicht anzeigen. Mir ist jedoch aufgefallen, dass versucht wird, eine Verbindung zu einem anderen sekundären Mitglied herzustellen, das inaktiv ist. Kann es die Ursache des Problems sein?
Michael
1
Eine mögliche Ursache ist, dass Ihre sekundäre wie hier angegeben "abgestanden" wird .
Stellen Sie beim erneuten Synchronisieren eines Mitglieds sicher, dass der RS nicht überlastet ist.
Der Status STARTUP2 kann auf nicht genügend Speicherplatz zurückzuführen sein. Nun, da es keinen Ort für die Synchronisierung gibt, kann es nur im Zustand STARTUP2 bleiben.
show databases
scheitert mitnot master and slaveOk=false
Der STARTUP2-Status bedeutet, dass der Knoten nicht abstimmen kann. Ein Mitglied eines RS tritt in diesen Zustand ein, sobald der MongoD-Prozess das Laden seiner Konfiguration abgeschlossen hat. In diesem Status hat das Mitglied Threads erstellt, um die internen Replikationsvorgänge zu verarbeiten. Der Status muss jedoch noch in "Wiederherstellen" und danach in "Sekundär" geändert werden (siehe [Status und Details in den Dokumenten]) .
Wenn sich Ihr Knoten länger als eine kurze Zeit in diesem Zustand befindet, tritt ein seltsames Verhalten auf. Ohne die Protokolle ist dies so gut wie unmöglich zu analysieren, um festzustellen, warum es nicht funktioniert. Wenn Sie rs.status () und db.printSlaveReplicationInfo () ausführen, erhalten Sie einige Details zum lokalen Bild auf dem Knoten.
Der normale Lösungsansatz besteht darin, den Knoten herunterzufahren, seine Datendateien (die Dateien im Datenbankpfad) zu löschen und neu zu starten. Dadurch wird der anfängliche Synchronisierungsprozess neu gestartet und es sollte zu SECONDARY übergegangen werden. Wenn es in STARTUP2 erneut stecken bleibt, müssen Sie sich die Protokolle ansehen, um weitere Informationen darüber zu erhalten, warum - es gibt eine Reihe von Ursachen, aber eine, die auftreten kann, ist ein flockiges Netzwerk oder ein lokaler Ressourcenkonflikt.
Es ist zu beachten, dass der Knoten während einer anfänglichen Synchronisierung in STARTUP2 verbleibt. Je nach Menge der zu synchronisierenden Daten kann dies eine beträchtliche Zeitdauer (möglicherweise Tage) sein.
quelle
db.stats
der Datenbank sehe, wächst. Das Protokoll sagt, dass einige Objektecloned
. Ich suche noch nach möglichen Ursachen für dieses Problem.ping
zwischen den Gastgebern ist in Ordnung.Eine mögliche Ursache ist, dass Ihre sekundäre wie hier angegeben "abgestanden" wird .
Stellen Sie beim erneuten Synchronisieren eines Mitglieds sicher, dass der RS nicht überlastet ist.
quelle
Der Status STARTUP2 kann auf nicht genügend Speicherplatz zurückzuführen sein. Nun, da es keinen Ort für die Synchronisierung gibt, kann es nur im Zustand STARTUP2 bleiben.
quelle