Update: April 2018
Diese Antwort war zum Zeitpunkt der Frage richtig, aber seitdem haben sich die Dinge weiterentwickelt. Seit Einführung der Version 3.4 wurde Parallelität eingeführt und das Ticket, auf das ich ursprünglich verwiesen habe, wurde geschlossen. Für weitere Informationen gehe ich auf einige Details in dieser neueren Antwort ein . Ich werde den Rest der Antwort unverändert lassen, da sie eine gute Referenz für allgemeine Probleme / Einschränkungen bleibt und für alle Benutzer einer älteren Version gültig ist.
Ursprüngliche Antwort
Wenn Sie interessiert sind, erkläre ich ausführlich, was mit einer Blockmigration im M202 Advanced-Kurs passiert . Nehmen wir im Allgemeinen nur an, dass Migrationen selbst für leere Blöcke nicht sehr schnell sind, da die Verwaltung durchgeführt wird, um sicherzustellen, dass Migrationen in einem aktiven System funktionieren (diese finden immer noch statt, auch wenn nur ein Ausgleich stattfindet).
Darüber hinaus findet jeweils nur eine Migration im gesamten Cluster statt - es gibt keine Parallelität. Trotz der Tatsache, dass Sie zwei "volle" Knoten und zwei "leere" Knoten haben, findet zu jedem Zeitpunkt höchstens eine Migration statt (zwischen dem Shard mit den meisten Chunks und dem Shard mit den geringsten). Wenn Sie also 2 Shards hinzugefügt haben, erhalten Sie nichts an Ausgleichsgeschwindigkeit und erhöhen nur die Anzahl der Chunks, die bewegt werden müssen.
Für die Migrationen selbst sind die Chunks wahrscheinlich ~ 30 MB groß (hängt davon ab, wie Sie Daten aufgefüllt haben, aber im Allgemeinen ist dies Ihr Durchschnitt mit der standardmäßigen maximalen Chunk-Größe). Sie können db.collection.getShardDistribution()
nach einigen dieser Informationen suchen und meine Antwort hier finden, um noch mehr Informationen über Ihre Chunks zu erhalten.
Da keine andere Aktivität ausgeführt wird, muss der Ziel-Shard (einer der neu hinzugefügten Shards) für eine Migration ~ 30 MB Daten aus den Quell-Shards (einer der ursprünglichen 2) lesen und die Konfigurationsserver auf aktualisieren Reflektieren Sie den neuen Chunk-Speicherort, sobald er fertig ist. Das Verschieben von 30 MB Daten sollte für ein normales System ohne Last kein großer Engpass sein.
Wenn es langsam ist, gibt es eine Reihe möglicher Gründe, warum dies der Fall ist. Die häufigsten Gründe für ein System, das nicht ausgelastet ist, sind:
- Quellfestplatten-E / A - Wenn sich die Daten beim Lesen nicht im aktiven Speicher befinden, müssen sie von der Festplatte ausgelagert werden
- Netzwerk - Wenn Latenz, Ratenbegrenzung, Paketverlust usw. auftreten, kann das Lesen eine Weile dauern
- Zielfestplatten-E / A - Die Daten und Indizes müssen auf die Festplatte geschrieben werden. Viele Indizes können dies verschlimmern. Auf einem leicht ausgelasteten System ist dies jedoch normalerweise kein Problem
- Probleme mit Migrationen, die Abbrüche und fehlgeschlagene Migrationen verursachen (Probleme mit Konfigurationsservern, Probleme mit Löschvorgängen auf Primärserien)
- Replikationsverzögerung - Bei Migrationen zu Replikatsätzen schreiben Sie Bedenken
w:2
oder w:majority
werden standardmäßig verwendet und erfordern aktuelle Secondaries, um diese zu erfüllen.
Wenn das System ausgelastet war, dann waren Speicherkonflikte normalerweise auch hier Verdächtige.
Weitere Informationen darüber, wie lange Migrationen dauern, ob sie fehlschlagen usw., finden Sie in den Einträgen in Ihrem config.changelog
:
// connect to mongos
use config
db.changelog.find()
Wie Sie gesehen haben und wie ich den Leuten im Allgemeinen sage, wenn ich Training / Ausbildung mache, ist es normalerweise besser, mit 4 zu beginnen, als hochzufahren, wenn Sie wissen, dass Sie 4 Scherben benötigen. Wenn Sie dies tun, müssen Sie sich darüber im Klaren sein, dass das Hinzufügen eines Shards lange dauern kann und sich zunächst eher negativ auf die Ressourcen als auf den Gewinn auswirkt ( eine ausführlichere Beschreibung finden Sie in Teil II meiner Sharding-Fallstricke ).
Informationen zum Verfolgen / Upvoten / Kommentieren der Funktionsanforderung zur Verbesserung der Parallelität von Blockmigrationen finden Sie unter SERVER-4355