MongoDB behandelt die Datenmigration zwischen Scherben hauptsächlich durch einen Prozess, der als Chunk -Migration bezeichnet wird. Dies ist ein wesentlicher Bestandteil der Sharding -Architektur, mit denen Daten in einem Cluster gleichmäßig über mehrere Scharden verteilen sollen. Sharding in MongoDB is the method used to horizontally scale the database by partitioning data across multiple servers or shards. Dieses System nutzt einen Shard -Schlüssel, bei dem es sich um ein Feld oder eine Reihe von Feldern in einem Dokument handelt, das die Verteilung der Daten bestimmt. Um die Datenmigration zwischen Shards zu verwalten, verwendet MongoDB einen Hintergrundprozess namens Balancer, der die Datenverteilung durch Migration von Datenbereichen (oder Brocken) nach Bedarf optimiert.
Sharded Cluster und Chunk -Migrationsübersicht
MongoDB teilt Shard -Kollektionen in Stücke, bei denen es sich um zusammenhängende Bereiche der Schard -Schlüsselwerte handelt. Jeder Chunk gehört zu einem bestimmten Shard, und diese Stücke halten zusammen den gesamten Datensatz. Der Balancer überwacht die Verteilung der Stücke über die Scherben und migriert die Stücke zwischen Scherben, um das Gleichgewicht aufrechtzuerhalten. Dieser Migrationsmechanismus hilft dabei, Hotspots zu vermeiden, die Abfrageleistung zu verbessern und die Nutzung der Ressourcen zu optimieren.
Die Chunk -Migration ist in Szenarien von Vorteil, wie wenn neue Scherben zu einem Cluster hinzugefügt werden, wenn Daten ungleichmäßig Ungleichgewicht verursachen oder wenn Zonen für Datenlokalität oder regulatorische Anforderungen neu definiert werden müssen. Die Migration arbeitet auf der Strecke und verschiebt einen gesamten Bereich von Shard -Schlüsselwerten von einer Shard in eine andere.
Migrationsprozessdetails
Die Chunk -Migration von MongoDB funktioniert in mehreren Phasen:
1. Auswahl von Chunk zum Bewegen: Der Balancer oder ein Administrator wählt einen Teil aus, der eine Neuzuweisung für einen anderen Shard erfordert, um den Cluster auszugleichen.
2. Klonphase: Der Spender Shard (der derzeit hält das Stück) kopiert alle Dokumente im Chunk zum Empfänger -Shard. In dieser Zeit werden auch neue Schreibvorgänge an den Chunk auf dem Spender Shard verfolgt.
3. Nachholungsphase: Der Empfänger-Shard wendet alle Schreibvorgänge an, die während der Klonphase stattgefunden haben, um sicherzustellen, dass sie die aktuellsten Daten enthält.
4. Critical Section und Commit: Der Spender Shard gibt einen kritischen Abschnitt ein, in dem Schreibvorgänge in den Chunk kurz blockiert sind und der Bemalungsbesitz atomisch auf den Empfänger -Shard umgestellt wird.
5. Phase löschen: Der Spender Shard asynchron entzieht Dokumente, die dem migrierten Teil gehören, sobald er bestätigt, dass der Empfänger den Chunk erfolgreich begangen hat.
Der Balancer stellt sicher, dass jeweils nur eine Migration pro Shard stattfindet, um die Auswirkungen auf die Shard -Leistung zu minimieren. Es kann mehrere Migrationen parallel über verschiedene Shard -Paare ausführen, wenn sie unabhängig sind.
Automatischer Balancer
Der Balancer wird als Hintergrund -Thread auf dem Primärknoten des Konfigurationsservers ausgeführt und überwacht ständig die Shard -Datenausgleich. Es verfolgt die Datengröße pro Chunk, um festzustellen, ob Migrationen gemäß einem konfigurierbaren Gleichgewichtsschwellenwert benötigt werden. Wenn Unterschiede in der Datengröße zwischen Scherben diesen Schwellenwert überschreiten, initiiert der Balancer Migrationen.
Der Balancer arbeitet für Anwendungen größtenteils transparent, kann jedoch für Wartungs- oder Abstimmungszwecke vorübergehend deaktiviert werden. Es respektiert auch Zonen, die im Cluster konfiguriert sind und sicherstellen, dass die Stücke innerhalb entsprechender Zonengrenzen migriert werden.
Manuelle Migrationsbefehle
Während der Balancer die Chunk -Migration automatisiert, ermöglicht MongoDB auch die manuelle Steuerung mit Befehlen wie "Movechunk" und "Moverange". Diese Befehle erzwingen die Migration bestimmter Stücke oder Chunk -Bereiche von einer Scherbe zum anderen.
- `movechunk` wird verwendet, um einen Stück mit einem bestimmten Shard -Schlüsselwert auf einen bestimmten Shard zu migrieren. Dies ist nützlich für gezielte Migrationen für den Lastausgleich oder die Datenlokalität.
- "Moverange" ermöglicht die Migration eines zusammenhängenden Bereichs von Shard -Tasten, was für komplexere Strategien für Datenausgleiche nützlich ist.
Administratoren können diese Befehle für Vorabstücke verwenden, um Daten gleichmäßig vor der Einnahme von Massen zu verteilen oder Migrationsfehler zu lösen, die durch Ausgleichsfensterbeschränkungen verursacht werden.
Umgang mit verwaisten Dokumenten und Konsistenz
Während und nach der Migration der Chunk können verwaiste Dokumente (Dokumente, die nicht mehr der zugewiesenen Chunk -Reichweite des Spenders Shard gehören) vorübergehend auf dem Spender Shard vorhanden, bis sie gereinigt werden.
MongoDB gewährleistet die Konsistenz während der gesamten Migration, indem sie die Operationen nacheinander anwenden und einen Koordinationsmechanismus anwenden, der während des kritischen Abschnitts geschriebene Schreibungen blockiert. Nach der Migration wird asynchron ausgeführt, wobei die Waisenreinigung stört, während die ständigen Abfragen gestört werden.
Das Starten von MongoDB 5.3 generiert Änderungsströme keine Ereignisse für Aktualisierungen zu verwaisten Dokumenten während der Migration, um die Genauigkeit des Ereignisstroms aufrechtzuerhalten.
Auswirkungen auf die Leistung und den Betrieb
Chunk -Migrationen tragen über dem Overhead, einschließlich Netzwerkbandbreitenkonsum, CPU und Scheiben -I/A, die sich auf die Clusterleistung auswirken können. MongoDB minimiert diesen Einfluss von:
- Einschränkung der Teilnahme eines Shards an einer Migration gleichzeitig.
- Migrationen anstellen und das Löschen von Phasen überlappend zum schnelleren Entladen löschen können.
- Verwenden von Drosseloptionen, um die Migration zu stimmen und während der Migration Besorgnis zu schreiben.
Migrierende Daten beeinflussen auch vorübergehend sekundäre Lesevorgänge, die möglicherweise Dokumente während der Waisenreinigungsphase verpassen. Daher müssen die Anwendungen dies bei der Gestaltung ihrer Abfragen berücksichtigen.
Migration in bestimmten Szenarien
In Fällen wie Migration von Daten zwischen Zonen mit Tag -Bereichen oder von ungeschützten bis zu Sharded Setups, migriert MongoDB die Daten nach der Neukonfiguration allmählich basierend auf aktualisierten Shard -Schlüsselbereichen oder Zonen. Das Entfernen alter Tag -Bereiche und das Erstellen neuer Auslöser löst beispielsweise die Migration der Balancer aus, um Daten entsprechend zu verschieben.
Bei der Migration von MongoDB-Clustern in mit Wolken verwaltete Lösungen oder zwischen Sharded-Clustern führen Migrationsinstrumente häufig die Migration der schardenweise und kopieren Sie SHARD-Daten individuell durch, während Sie die Taste-Key-Verteilungen beibehalten.
Tools und Dienstprogramme für die Migration
Datenübertragungsdienste (DTS) und andere Tools von Drittanbietern helfen bei der Migration von Daten zwischen MongoDB-Instanzen oder -Clustern, der Bearbeitung von Shard-Mapping, Datenkonsistenz und inkrementellen Aktualisierungen. Diese Tools unterstützen häufig die Migration von nicht geschützten zu Sharded-Clustern, indem sie Standard-Shard-Schlüsselwerte für Quelldaten ohne Shard-Tasten zuweisen.
Zusammenfassung der wichtigsten Punkte
- MongoDB -Partitionsdaten in Stücke, die über Scherben mit Shard -Tasten verteilt sind.
- Der Balancer migriert automatisch die Brocken, um die ausgewogene Datenverteilung aufrechtzuerhalten.
- Die Migration beinhaltet das Klonen von Daten, Aufholungen, Atomübergabe und asynchrone Aufräumarbeiten.
- Migrationen sind auf einen pro Shard beschränkt, um die Systemauswirkungen zu verringern.
- Manuelle Migrationsbefehle bieten administrative Kontrolle für die Chunk -Verteilung.
- Orphan-Dokumente werden nach der Migration asynchron gereinigt.
- Die Migration beeinflusst die Leistung und die sekundäre Les -Konsistenz vorübergehend.
- Die Migration zwischen Zonen oder Änderungen der Shard -Schlüsselbereiche erfolgt durch Rekonfigurationsauslöser -Migrationen.
- Migrationstools unterstützen die Datenbewegung zwischen Clustern oder Architekturen.
Dieser Migrationsmechanismus stellt sicher, dass MongoDB -Cluster ausgewogen, skalierbar und leistungsfähig bleiben, wenn sich die Daten wachsen und sich die Clusterkonfigurationen entwickeln, was eine kontinuierliche Verfügbarkeit mit minimaler Störung der Anwendungen bietet.