MongoDB gère la migration des données entre les fragments principalement par un processus appelé migration de morceaux, qui fait partie intégrante de l'architecture de fragment conçue pour distribuer uniformément les données sur plusieurs fragments dans un cluster. La rupture dans MongoDB est la méthode utilisée pour évoluer horizontalement la base de données en partitionnant les données sur plusieurs serveurs ou fragments. Ce système exploite une clé de fragment, qui est un champ ou un ensemble de champs dans un document qui détermine la distribution des données. Pour gérer la migration des données entre les fragments, MongoDB utilise un processus de fond appelé l'équilibreur, qui optimise la distribution des données en migrant les plages (ou morceaux) de données si nécessaire.
Présentation de la migration en grappe et en morceaux
MongoDB divise les collections fragnées en morceaux, qui sont des gammes contiguës de valeurs de clé de fragment. Chaque morceau appartient à un fragment spécifique, et ces morceaux détiennent collectivement l'ensemble de données. L'équilibreur surveille la distribution des morceaux à travers les fragments et migre des morceaux entre les éclats pour maintenir l'équilibre. Ce mécanisme de migration aide à éviter les points chauds, à améliorer les performances de la requête et à optimiser l'utilisation des ressources.
La migration des morceaux est bénéfique dans des scénarios tels que lorsque de nouveaux éclats sont ajoutés à un cluster, lorsque les données augmentent de manière inégale provoquant un déséquilibre, ou lorsque les zones doivent être redéfinies pour la localité des données ou les exigences réglementaires. La migration fonctionne au niveau du morceau, déplaçant une gamme complète de valeurs de clé de fragment d'un fragment à l'autre.
Détails du processus de migration
La migration des morceaux de MongoDB fonctionne en plusieurs phases:
1. Sélection de morceau à déplacer: l'équilibreur ou un administrateur sélectionne un morceau qui doit être réaffecté à un autre fragment pour équilibrer le cluster.
2. Clone Phase: The Donor Shard (celui qui ait actuellement le morceau) copie tous les documents du morceau du fragment du destinataire. Pendant ce temps, de nouvelles écritures sur le morceau sur l'éclat du donneur sont également suivies.
3. Phase de rattrapage: le fragment du destinataire applique toute écriture qui s'est produite pendant la phase de clone pour s'assurer qu'elle a les données les plus à jour.
4. Section critique et engagement: le fragment des donateurs entre dans une section critique où les opérations d'écriture sur le morceau sont brièvement bloquées, et la propriété de morceau est atomiquement commandé au fragment du destinataire.
5. Supprimer la phase: l'éclat du donneur supprime de manière asynchrone les documents appartenant au morceau migré une fois qu'il confirme que le destinataire a réussi à engager le morceau.
L'équilibreur garantit qu'une seule migration par fragment se produit à la fois pour minimiser l'impact sur les performances des fragments. Il peut effectuer plusieurs migrations en parallèle sur différentes paires de fragment si elles sont indépendantes.
Balancer automatique
L'équilibreur s'exécute en tant que thread d'arrière-plan du nœud principal du serveur de configuration et surveille constamment l'équilibre des données de la fragment. Il suit la taille des données par morceau pour déterminer si les migrations sont nécessaires en fonction d'un seuil d'équilibre configurable. Lorsque les différences de taille des données entre les éclats dépassent ce seuil, l'équilibreur initie les migrations.
L'équilibreur fonctionne de manière principalement transparente aux applications, mais il peut être temporairement désactivé à des fins de maintenance ou de réglage. Il respecte également les zones configurées dans le cluster, garantissant que les morceaux sont migrés dans les limites de zone appropriées.
Commandes de migration manuelle
Alors que l'équilibreur automatise la migration de morceaux, MongoDB permet également un contrôle manuel à l'aide de commandes comme «MOVECHUNK» et «moverange». Ces commandes forcent la migration de morceaux spécifiques ou des morceaux de morceaux d'un fragment à un autre.
- `MOVECHUNK` est utilisé pour migrer un morceau contenant une valeur de clé de fragment spécifique vers un fragment spécifié. Ceci est utile pour les migrations ciblées pour l'équilibrage de charge ou la localité des données.
- «Moverange» permet de migrer une gamme contigu de clés de fragment, utile pour des stratégies de rééquilibrage de données plus complexes.
Les administrateurs peuvent utiliser ces commandes pour les morceaux de pré-séparation afin de distribuer uniformément les données avant l'ingestion en vrac ou pour résoudre les défaillances de migration causées par l'équilibre des contraintes de fenêtre.
Gestion des documents orphelins et cohérence
Pendant et après la migration des morceaux, les documents orphelins (les documents n'appartenant plus aux gammes de morceaux attribuées du fragment du donneur) peuvent exister temporairement sur l'éclat du donneur jusqu'à ce qu'ils soient nettoyés.
MongoDB assure la cohérence tout au long de la migration en appliquant des opérations en séquence et en utilisant un mécanisme de coordination qui bloque les écritures pendant la section critique. Après la migration, le nettoyage orphelin fonctionne de manière asynchrone tout en évitant les interférences avec les requêtes en cours.
Démarrage de MongoDB 5.3, les flux de change ne génèrent pas d'événements pour les mises à jour des documents orphelins pendant la migration, pour maintenir la précision des flux d'événements.
Impact sur les performances et les opérations
Les migrations de morceaux transportent la surcharge, y compris la consommation de bande passante du réseau, le processeur et les E / S de disque qui peuvent avoir un impact sur les performances du cluster. MongoDB minimise cet impact par:
- restreindre la participation d'un fragment à une migration à la fois.
- Fiche des migrations et permettant à la suppression de phases pour s'exécuter en grand pour un déchargement plus rapide.
- Utilisation d'options de limitation pour régler la concurrence de la migration et rédiger une préoccupation pendant la migration.
La migration des données affecte également temporairement les lectures secondaires qui peuvent manquer des documents pendant la phase de nettoyage orphelin, les applications doivent donc considérer cela lors de la conception de leurs requêtes.
Migration dans des scénarios spécifiques
Dans des cas tels que la migration des données entre les zones avec des gammes de balises, ou des configurations non fascinées aux configurations fracées, MongoDB migre progressivement les données sur la base de gammes ou de zones de clés de fragment mis à jour après reconfiguration. Par exemple, la suppression des anciennes gammes de balises et la création de nouveaux déclenche la migration de l'équilibre pour déplacer les données en conséquence.
Lors de la migration des grappes MongoDB vers des solutions gérées par les nuages ou entre les grappes fragnées, les outils de migration effectuent souvent une migration par édition, la copie des données de fragment individuellement tout en maintenant les distributions de clés de fragment.
outils et utilitaires pour la migration
Les services de transmission de données (DTS) et d'autres outils tiers aident à migrer les données entre les instances ou les clusters MongoDB, la cartographie des fragments de gestion, la cohérence des données et les mises à jour incrémentielles. Ces outils prennent souvent en charge la migration des clusters non fascinés vers des fractures en attribuant des valeurs de clé de fragment par défaut aux données source manquant de clés de fragment.
Summary of Key Points
- Données de partitions MongoDB en morceaux distribués à travers les fragments à l'aide de clés de fragment.
- L'équilibreur migre automatiquement des morceaux pour maintenir une distribution de données équilibrée.
- La migration implique le clonage des données, les écritures de rattrapage, le transfert atomique et le nettoyage asynchrone.
- Les migrations sont limitées à une parole pour réduire l'impact du système.
- Les commandes de migration manuelles fournissent un contrôle administratif pour la distribution des morceaux.
- Les documents orphelins sont nettoyés de manière asynchrone après la migration.
- La migration affecte temporairement les performances et la cohérence de la lecture secondaire.
- La migration entre les zones ou les changements dans les gammes de clés de fragment est gérée par des migrations déclenchant de reconfiguration.
- Les outils de migration aident au mouvement des données entre les grappes ou les architectures.
Ce mécanisme de migration garantit que les clusters MongoDB restent équilibrés, évolutifs et performants à mesure que les données se développent et que les configurations de grappes évoluent, offrant une disponibilité continue avec une perturbation minimale des applications.