MongoDB übernimmt die Datenmigration zwischen Shards über den Balancer-Prozess. Der Balancer ist dafür verantwortlich, sicherzustellen, dass die Daten gleichmäßig auf die Shards in einem Shard-Cluster verteilt werden. Hier sind die Schritte, die bei der Datenmigration zwischen Shards erforderlich sind:
1. Auswuchten
- Automatischer Ausgleich: MongoDB gleicht Daten automatisch aus, indem es Blöcke von einem Shard zum anderen migriert. Dadurch wird sichergestellt, dass die Daten gleichmäßig auf die Shards verteilt werden.
2. Chunk-Migration
- Manuelle Migration: MongoDB kann eine manuelle Chunk-Migration für bestimmte Sammlungen durchführen. Dies ist nützlich für die Verteilung von Daten bei Masseneinfügungen.
3. Bereichsmigration
- Automatische Bereichsmigration: MongoDB migriert Daten bereichsweise. Der Balancer wartet nicht auf den Abschluss der Löschphase der aktuellen Migration, bevor er mit der nächsten Bereichsmigration beginnt.
4. Resharding
- Reshard-to-Shard-Technik: MongoDB verwendet Resharding, um Daten schnell auf die Shards im Cluster zu verteilen. Dies beinhaltet das absichtliche Sharding in einen temporären Shard-Schlüssel, der sich vom gewünschten Shard-Schlüssel unterscheidet, und das anschließende erneute Sharding in den gewünschten Shard-Schlüssel.
5. Chunk-Migrationsverfahren
- Quell-Shard: Der Quell-Shard startet die Verschiebung, wenn er einen internen Befehl empfängt. Während des Migrationsprozesses werden Vorgänge für den Chunk an den Quell-Shard gesendet.
- Ziel-Shard: Der Ziel-Shard erstellt alle von der Quelle benötigten Indizes, die auf dem Ziel nicht vorhanden sind. Der Ziel-Shard beginnt mit der Anforderung von Dokumenten im Chunk und beginnt mit dem Empfang von Kopien der Daten.
- Synchronisierung: Nach dem Empfang des endgültigen Dokuments im Block startet der Ziel-Shard einen Synchronisierungsprozess, um sicherzustellen, dass er über die während der Migration vorgenommenen Änderungen an den migrierten Dokumenten verfügt.
- Metadatenaktualisierung: Der Quell-Shard stellt eine Verbindung zur Konfigurationsdatenbank her und aktualisiert die Cluster-Metadaten mit dem neuen Speicherort für den Chunk.
- Löschphase: Nachdem der Quell-Shard die Aktualisierung der Metadaten abgeschlossen hat und keine offenen Cursor mehr auf dem Block vorhanden sind, löscht der Quell-Shard seine Kopie der Dokumente[3][5].
6. Jumbo Chunks
- Jumbo-Chunks: Wenn ein Block die maximale Größe überschreitet oder die Anzahl der Dokumente im Block die maximal zulässige Größe überschreitet, migriert MongoDB den Block nicht. Stattdessen versucht MongoDB, den Block aufzuteilen. Wenn die Aufteilung nicht erfolgreich ist, kennzeichnet MongoDB den Block als Jumbo, um wiederholte Versuche, den Block zu migrieren, zu vermeiden[3].
7. Überwachung und Wartung
- Überwachung: MongoDB bietet Tools zur Überwachung des Balancer-Prozesses und zur Sicherstellung, dass die Daten gleichmäßig auf die Shards verteilt werden.
- Wartung: MongoDB stellt Befehle zur Verwaltung des Balancers bereit und stellt sicher, dass die Datenmigration effizient und skalierbar ist.
Abschluss
MongoDB übernimmt die Datenmigration zwischen Shards über den Balancer-Prozess, der sicherstellt, dass die Daten gleichmäßig auf die Shards in einem Shard-Cluster verteilt werden. Der Balancer migriert Daten bereichsweise, und MongoDB stellt Tools zur Überwachung und Verwaltung des Balancer-Prozesses bereit.
Zitate:[1] https://stackoverflow.com/questions/48438644/migration-data-between-shards-with-mongodb
[2] https://hackernoon.com/optimize-data-migration-in-mongodb-resharding-techniques-for-speed-and-scalability
[3] https://www.mongodb.com/docs/v3.0/core/sharding-chunk-migration/
[4] https://www.mongodb.com/community/forums/t/shard-migration-leads-to-service-disruption/247228
[5] https://www.mongodb.com/docs/v6.2/core/sharding-balancer-administration/