2011-01-17 4 views
1

Ich habe kontinuierlich Daten in autosharded mongodb eingefügt. (nicht aktualisieren, nur Insertion)nosql mongodb replicaset autosharding, Datenverlust beim Ausführen eines Experiments

Experimentelle Setup 2 Scherben, jeder Scherbe hat 2 Knoten.

in shard1 -> node1 (primär), node2 in shard2 -> node3 (primär), node4

in einem Scherbe I sekundären Knoten (Knoten 2) nach unten gebracht -> noch die Daten korrekt nun eingefügt wurden Ich brachte die primäre (node1) auch runter -> komplette shard ist jetzt

Überraschenderweise nahm das ganze Mongo-Setup keine Schreibvorgänge.

gibt es eine andere Wendung in der Geschichte. Jetzt habe ich den Knoten2 nach oben gebracht, da dies der einzige verfügbare Knoten ist, wurde er primär und begann Daten zu akzeptieren.

Nach etwa 10 Minuten habe ich node1 auch hochgefahren.

Aber wenn ich die Daten überprüft, die ich in node1 eingefügt haben (wenn Knoten2 nach unten ist) verloren :(.

s1    s2 
    (n1,n2)  (n3,n4) 
    ---------  --------- 
1. (up,up)  (up, up) -> data was getting inserted 
2. (up,down)  (up, up) -> data was getting inserted properly (but got lost :() 
3. (down, down) (up, up) -> no data inserts were happening 
4. (down, up) (up, up) -> started taking data again 
5. (up, up)  (up, up) -> n1 picked data from n2, but couldn't give the data to n2 

im letzten Schritt, wenn ich n1 gebracht, bekam es die neuen Datensätze während Schritt von n2, aber der, dass n1 bekam über 2 wurden vollständig verloren :(.

Ist das erwartete Verhalten von mongo?

Jemand mir bitte helfen, ich kann mehr Experimente ausgeführt werden, wenn erforderlich :).

Vielen Dank im Voraus, Vivekananda Tadala

Antwort

3

Wenn Sie ein Mitglied in einem Zwei-Mitglieder-Replikat-Set herunterbringen, hört das andere auf, Schreibvorgänge zu akzeptieren. Sieh dir explanation an, warum du drei Mitglieder brauchst und benutze immer den abgesicherten Modus, wenn du rumspielst.

Die Replikation in MongoDB ist einseitig: Ein Slave kopiert Daten von einem aktuelleren Slave oder Master. Sie können nicht zwei Knoten haben, die (noch) Daten voneinander kopieren. Sie könnten in der Zwischenzeit an ensuring write replication interessiert sein.

Das Einfügen in Stücke auf einem abgeschossenen Shard funktioniert nicht, aber Sie können in Stücke auf Shards einfügen, die sich auf dem anderen Shard befinden. Sie können db.printShardingStatus() verwenden, um zu sehen, welche Chunks wo sind.

+0

danke für die Antwort, löste es viele meiner Zweifel, aber gibt es eine Möglichkeit, die Daten über den toten Master zu bekommen und es an den neuen Master zu schieben? Können wir etwas mit dem oplog machen? –

+0

Ja ... zumindest in der Theorie. Wenn ein Rollback stattfindet, sollten die Daten in eine .bson-Datei im Datenverzeichnis geschrieben werden. Sie könnten mongorestore verwenden, um es auf den aktuellen Master anzuwenden. Wie auch immer, wir (MongoDB Entwickler) haben heute darüber gesprochen, dass wir nicht sicher waren, ob es tatsächlich in die Rollback-Datei geschrieben wurde, also könnte dort ein Fehler sein. Aber wenn es ist, wird es durch 1.8.0 behoben werden. – kristina

+0

Fehlalarm, es ist nicht kaputt. Daten werden in einem Rollback/Verzeichnis gespeichert, siehe http://www.snailinaturtleneck.com/blog/2011/01/19/how-to-use-replica-set-rollbacks/. – kristina

Verwandte Themen