2016-06-10 1 views
1

Ich habe versucht, einen Befehl db.repairDatabase() von einer Mongo-Shell auf einer gesunden, aber großen MongoDB-Datenbank auszuführen. Es lief für ungefähr 10 Stunden und es wurde immer noch nicht abgeschlossen. Zum Besseren oder Schlechteren habe ich Strg-C gedrückt, um es abzubrechen.MongoDB gesperrt nach abgebrochenem db.repairDatabase()? Wie zu öffnen?

Es scheint, dass der Cluster in einem gesperrten Zustand belassen wurde. Befehle wie „Show dbs“ alle nicht mit „Operation timed out“:

mongos> show dbs 
2016-06-10T09:38:10.179-0400 E QUERY [thread1] Error: listDatabases failed:{ "code" : 50, "ok" : 0, "errmsg" : "Operation timed out" } : 
[email protected]/mongo/shell/utils.js:25:13 
[email protected]/mongo/shell/mongo.js:62:1 
[email protected]/mongo/shell/utils.js:760:19 
[email protected]/mongo/shell/utils.js:650:15 
@(shellhelp2):1:1 

Es wird nun für etwa 10 Stunden mehr so ​​gewesen, nachdem ich die db.repairDatabase getötet().

Was ist der richtige Weg, um davon zu erholen?

Meine Cluster-Info: Ich verwende MongoDB 3.2.5 überall. Ich habe 3 Konfig-Server, 11 Shards, jeder Shard ist ein Replikat-Set bestehend aus 2 Knoten und einem Arbiter. Und ich habe ungefähr 40 Knoten, die mongos Instanzen laufen lassen. Die 3 Konfigurationsserver sind immer noch 3.0-Stil (noch nicht auf Replikat-Set upgegraded).

Antwort

1

Gut für das, was es wert ist ich in der Lage war, den Cluster zurück zu bringen, wie folgt:

  1. Neu-Start alle mongos Dienste.
  2. Alle Mongod Arbiter neu gestartet.
  3. Neu gestarteter Mongod für alle 3 Konfigurationsserver.
  4. Neustart Mongod für 1 Knoten von jedem meiner 11 Shards Replica-Sets.
  5. Neustart Mongod für die anderen 1 Knoten von jedem meiner 11 Shards Replica-Sets.

Die Schritte 1 bis 4 haben nichts behoben.

Aber nachdem ich Schritt 5 ausgeführt habe, konnte ich wieder alle Datenbanken verwenden. Die Dinge scheinen jetzt wieder normal zu sein.