2014-10-29 10 views
10

Ich habe einen MongoDb-Produktionscluster mit 2.6.5, den ich kürzlich von zwei auf drei Shards migriert habe. Ich war ungefähr zwei Jahre lang als zwei Splitter gerannt. Jeder Shard ist ein 3-Server-Replikat und ich habe eine Sammlung erstellt.
Die sharded Sammlung ist ungefähr 240G, und mit dem neuen Shard habe ich nun gleichmäßig 2922 Stück auf jeden Shard verteilt. Meine Produktionsumgebung scheint gut zu funktionieren. Es gibt kein Problem beim Zugriff auf Daten.moveChunk konnte den TO-Shard bei der Datenübertragung nicht ansprechen: Ich kann keine neuen Chunks akzeptieren, da

[Anmerkung:. 1461 die Anzahl der Stücke von RS0 und shard1 bewegt werden soll 2922 auf shard2 machen]

war meine Absicht, drei weitere Sammlungen Scherbe, und so begann ich mit einer und erwartet, dass es über verbreiten die Scherben. Aber nein - ich endete mit diesem Wiederholungsfehler:

2014-10-29T20: 26: 35,374 + 0000 [Balancer] moveChunk Ergebnis: {cause: {ok: 0.0, errmsg: "kann neue Stücke nicht annehmen weil es immer noch 1461 Löschungen von der vorherigen Migration gibt "},

ok: 0.0, errmsg:" moveChunk konnte den TO-Shard bei der Datenübertragung nicht aktivieren: neue Chunks können nicht akzeptiert werden, da immer noch 1461 Löschungen aus der vorherigen Migration vorhanden sind "}

2014-10-29T20: 26: 35.375 + 0000 [Balancer] Balancer Verschiebung fehlgeschlagen: {Ursache: {ok: 0.0, errmsg:" kann keine neuen Chunks akzeptieren, da immer noch 1461 Delete von vorherigen sind Migration "},

ok: 0.0, errmsg: "moveChunk konnte TO-Shard bei der Datenübertragung nicht aktivieren: neue Chunks können nicht akzeptiert werden, da immer noch 1461 Löschungen aus der vorherigen Migration vorhanden sind"} from: rs0 to: shard1 chunk: min: {account_id: MinKey} max: {account_id: -9218254227106808901}

Mit ein wenig Recherche habe ich mir gedacht, ich sollte es einfach mal geben, da es offensichtlich nach dem Umzug aufräumen muss. Ich habe sh.disableBalancing ("Sammlungsname") ausgeführt, um die Fehler beim Versuch, die neue Sammlung zu sharden, zu stoppen. sh.getBalancerState zeigt true, , genauso wie sh.isBalancerRunning. Allerdings gab ich es 24 Stunden und die Fehlermeldung ist die gleiche. Ich würde denken, es würde mindestens 1 der 1461 gelöscht/gelöscht haben, die es löschen muss.

  1. Ist dieses gemeinsame Verhalten jetzt in 2.6 Welt? Muss ich jedes Mal, wenn ich die Umgebung mit einem anderen Shard anwachsen lasse, alle meine Sammlungen bearbeiten?
  2. Irgendeine Idee, wie man diese Aufräumarbeiten gehen kann? oder sollte ich einfach das primäre auf shard1 heruntertreten, was das Problem zu sein scheint?
  3. Wenn ich die primäre heruntersetze, habe ich noch Dateien auf der sekundären sowieso 'löschen/bereinigen'? Oder wird sich das um die Dinge kümmern, damit ich anfangen kann, neue Kollektionen zu sammeln?

Vielen Dank im Voraus für irgendwelche Einblicke.

+0

Das ist nicht üblich, sei versichert. Ich muss in die Quellen graben, um herauszufinden, was los ist ... –

+0

Ein Vorschlag ist, den gesamten Cluster neu zu starten. Siehe [SERVER-14047] (https://jira.mongodb.org/browse/SERVER-14047). –

Antwort

16

Es ist nicht üblich, diese Art von Problem zu sehen, aber ich habe gesehen, dass es sporadisch auftritt.

Die beste Abhilfemaßnahme, die hier vorgenommen werden kann, besteht darin, die Primärseite des referenzierten TO-Shards herunterzustufen, wodurch die Hintergrundlöschvorgänge gelöscht werden. Die Lösch-Threads existieren nur auf der aktuellen Primärdatenbank (sie werden von dieser Primärdatenbank über die repliziert, während sie verarbeitet werden). Wenn Sie einen Schritt nach unten machen, wird es sekundär, die Threads können nicht mehr schreiben und Sie erhalten einen neuen Primärschlüssel ohne ausstehende Löschungen.Möglicherweise möchten Sie den früheren primären Computer nach dem Schritt neu starten, um alte Cursor zu löschen, aber das ist normalerweise nicht dringend.

Sobald Sie dies tun, werden Sie mit einer großen Anzahl von verwaisten Dokumenten, die Adressen mit der cleanUpOrphaned command sein können, die ich empfehlen würde, zu niedrigen Verkehrszeiten (wenn Sie solche Zeiten haben) zu verlassen.

Wenn dies ein wiederkehrendes Problem ist, dann ist es wahrscheinlich, dass die Primärgeräte ein wenig in Bezug auf Belastung kämpfen, und um das Anstehen von Löschungen zu vermeiden, können Sie die _waitForDelete option für den Balancer auf True (False von default) wie folgt:

use config 
db.settings.update(
    { "_id" : "balancer" }, 
    { $set : { "_waitForDelete" : true } }, 
    { upsert : true } 
) 

Dies bedeutet, dass jede Migration langsamer ist (vielleicht deutlich so), aber der Hintergrund nicht dazu führen, löscht zu akkumulieren.