Το MongoDB χειρίζεται τη μετανάστευση δεδομένων μεταξύ των θραυσμάτων κυρίως μέσω μιας διαδικασίας που ονομάζεται μετανάστευση κομματιών, η οποία αποτελεί αναπόσπαστο μέρος της αρχιτεκτονικής που έχει σχεδιαστεί για να διανείμει ομοιόμορφα τα δεδομένα σε πολλαπλά θραύσματα σε ένα σύμπλεγμα. Το Sharding στο MongoDB είναι η μέθοδος που χρησιμοποιείται για την οριζόντια κλιμάκωση της βάσης δεδομένων διαχωρίζοντας δεδομένα σε πολλούς διακομιστές ή θραύσματα. Αυτό το σύστημα αξιοποιεί ένα κλειδί Shard, το οποίο είναι ένα πεδίο ή ένα σύνολο πεδίων σε ένα έγγραφο που καθορίζει την κατανομή των δεδομένων. Για να διαχειριστεί τη μετανάστευση δεδομένων μεταξύ Shards, το MongoDB χρησιμοποιεί μια διαδικασία φόντου που ονομάζεται Balancer, η οποία βελτιστοποιεί τη διανομή δεδομένων με τη μετανάστευση των περιοχών δεδομένων (ή τα κομμάτια) όπως είναι απαραίτητο.
Επισκόπηση συμπλέγματος και μετανάστευσης κομματιών
Το MongoDB χωρίζει τις θρυμματισμένες συλλογές σε κομμάτια, τα οποία είναι συνεχόμενες περιοχές των βασικών τιμών Shard. Κάθε κομμάτι ανήκει σε ένα συγκεκριμένο θραύσμα και αυτά τα κομμάτια συγκρατούν συλλογικά ολόκληρο το σύνολο δεδομένων. Ο εξισορροπητής παρακολουθεί τη διανομή κομματιών σε θραύσματα και μεταναστεύει τα κομμάτια μεταξύ των κομματιών για τη διατήρηση της ισορροπίας. Αυτός ο μηχανισμός μετανάστευσης συμβάλλει στην αποφυγή των hotspots, στη βελτίωση της απόδοσης των ερωτημάτων και στη βελτιστοποίηση της χρήσης των πόρων.
Η μετανάστευση των κομματιών είναι επωφελής σε σενάρια, όπως όταν προστίθενται νέα θραύσματα σε ένα σύμπλεγμα, όταν τα δεδομένα αναπτύσσονται ανισορροπία προκαλώντας ανισορροπία ή όταν οι ζώνες πρέπει να επαναπροσδιοριστούν για την τοποθεσία δεδομένων ή τις ρυθμιστικές απαιτήσεις. Η μετανάστευση λειτουργεί σε επίπεδο κομματιών, μετακινώντας μια ολόκληρη σειρά τιμών κλειδιών από το ένα Shard στο άλλο.
Λεπτομέρειες διαδικασίας μετανάστευσης
Η μετανάστευση κομματιών του MongoDB λειτουργεί σε διάφορες φάσεις:
1. Επιλογή του κομματιού για μετακίνηση: Ο ισορροπητής ή ένας διαχειριστής επιλέγει ένα κομμάτι που χρειάζεται να επαναπροσδιορίσει σε ένα άλλο θραύσμα για να εξισορροπήσει το σύμπλεγμα.
2. Κλώνη φάση: Ο δότος Shard (αυτός που κρατάει το κομμάτι) αντιγράφει όλα τα έγγραφα στο κομμάτι του παραλήπτη. Κατά τη διάρκεια αυτής της περιόδου, οι νέοι γράφουν στο κομμάτι του δότη Shard παρακολουθούνται επίσης.
3. Φάση Catch-Up: Το Shard του παραλήπτη εφαρμόζει κάθε γράφει ότι συνέβη κατά τη διάρκεια της φάσης κλώνου για να εξασφαλίσει ότι έχει τα πιο ενημερωμένα δεδομένα.
4. Κρίσιμο τμήμα και δέσμευση: Ο δότος Shard εισέρχεται σε ένα κρίσιμο τμήμα όπου οι εργασίες εγγραφής στο κομμάτι μπλοκαρίζονται σύντομα και η ιδιοκτησία του κομματιού μετατρέπεται ατομικά στο Shard του παραλήπτη.
5. Διαγραφή Φάσης: Ο δότος Shard ασύγχρονα αφαιρεί τα έγγραφα που ανήκουν στο μετανάστευστο κομμάτι μόλις επιβεβαιώσει ότι ο παραλήπτης έχει διαπράξει με επιτυχία το κομμάτι.
Ο εξισορροπητής εξασφαλίζει ότι μόνο μία μετανάστευση ανά θόρυβο συμβαίνει κάθε φορά για να ελαχιστοποιηθεί η επίδραση στην απόδοση του Shard. Μπορεί να εκτελέσει πολλαπλές μεταναστεύσεις παράλληλα σε διαφορετικά ζεύγη θραυσμάτων, εάν είναι ανεξάρτητες.
Αυτόματο εξισορρόπηση
Το Balancer λειτουργεί ως νήμα φόντου στον πρωτεύοντα κόμβο του διακομιστή Config και συνεχώς παρακολουθεί το υπόλοιπο δεδομένων Shard. Παρακολουθεί το μέγεθος των δεδομένων ανά κομμάτι για να διαπιστωθεί εάν απαιτούνται μεταναστεύσεις σύμφωνα με ένα κατώτατο όριο ισορροπίας. Όταν οι διαφορές στο μέγεθος των δεδομένων μεταξύ των θραυσμάτων υπερβαίνουν αυτό το κατώφλι, ο εξισορροπητής αρχίζει μεταναστεύσεις.
Ο εξισορροπητής λειτουργεί κατά κύριο λόγο διαφανής σε εφαρμογές, αλλά μπορεί να απενεργοποιηθεί προσωρινά για σκοπούς συντήρησης ή συντονισμού. Επίσης, σέβεται τις ζώνες που έχουν ρυθμιστεί μέσα στο σύμπλεγμα, εξασφαλίζοντας ότι τα κομμάτια μεταναστεύουν εντός των κατάλληλων ορίων ζώνης.
Χειροκίνητες εντολές μετανάστευσης
Ενώ ο εξισορροπητής αυτοματοποιεί τη μετανάστευση κομματιών, το MongoDB επιτρέπει επίσης χειροκίνητο έλεγχο χρησιμοποιώντας εντολές όπως το `movechunk` και το` moverange '. Αυτές οι εντολές αναγκάζουν τη μετανάστευση συγκεκριμένων κομματιών ή κομματιών κυμαίνεται από το ένα Shard στο άλλο.
- Το `movechunk` χρησιμοποιείται για τη μετεγκατάσταση ενός κομματιού που περιέχει μια συγκεκριμένη τιμή κλειδιού shard σε ένα συγκεκριμένο shard. Αυτό είναι χρήσιμο για στοχοθετημένες μεταναστεύσεις για εξισορρόπηση φορτίου ή τοποθεσία δεδομένων.
- `Moverange` επιτρέπει τη μετανάστευση μιας συνεχόμενης σειράς πλήκτρων Shard, χρήσιμο για πιο σύνθετες στρατηγικές εξισορρόπησης δεδομένων.
Οι διαχειριστές μπορούν να χρησιμοποιήσουν αυτές τις εντολές για τα κομμάτια προ-σχισμής για να διανείμουν ομοιόμορφα δεδομένα πριν από την κατάποση χύδην ή για την επίλυση των αποτυχιών της μετανάστευσης που προκαλούνται από τους περιορισμούς των παραθύρων εξισορρόπησης.
Χειρισμός ορφανών εγγράφων και συνέπειας
Κατά τη διάρκεια και μετά τη μετανάστευση κομματιών, τα ορφανά έγγραφα (τα έγγραφα δεν ανήκουν πλέον στις εκχωρημένες σειρές του δότη Shard) μπορεί να υπάρχουν προσωρινά στο Shard του δότη μέχρι να καθαριστούν.
Το MongoDB εξασφαλίζει τη συνέπεια σε όλη τη μετανάστευση εφαρμόζοντας τις λειτουργίες σε ακολουθία και χρησιμοποιώντας έναν μηχανισμό συντονισμού που ο Blocks γράφει κατά τη διάρκεια του κρίσιμου τμήματος. Μετά τη μετανάστευση, ο καθαρισμός των ορφανών εκτελεί ασύγχρονα, αποφεύγοντας παράλληλα παρεμβολές με συνεχιζόμενα ερωτήματα.
Ξεκινώντας το MongoDB 5.3, τα ρεύματα αλλαγής δεν δημιουργούν συμβάντα για ενημερώσεις σε ορφανά έγγραφα κατά τη διάρκεια της μετανάστευσης, για να διατηρηθούν η ακρίβεια του ρεύματος συμβάντων.
Αντίκτυπος στην απόδοση και τις λειτουργίες
Οι μεταναστεύσεις με τα κομμάτια μεταφέρουν πάνω από το κεφάλι, συμπεριλαμβανομένης της κατανάλωσης εύρους ζώνης δικτύου, της CPU και του δίσκου I/O που μπορούν να επηρεάσουν την απόδοση του συμπλέγματος. Το MongoDB ελαχιστοποιεί αυτόν τον αντίκτυπο από:
- Περιορισμός της συμμετοχής ενός Shard σε μία μετανάστευση κάθε φορά.
- Μετανάστευση ουράς και επιτρέποντας τη διαγραφή φάσεων να εκτελούνται επικαλυπτόμενα για ταχύτερη εκφόρτωση.
- Χρησιμοποιώντας επιλογές στραγγαλισμού για να συντονιστείτε την ταυτότητα της μετανάστευσης και να γράψετε ανησυχία κατά τη διάρκεια της μετανάστευσης.
Τα δεδομένα μετεγκατάστασης επηρεάζουν επίσης προσωρινά τις δευτερεύουσες αναγνώσεις που μπορεί να χάσουν έγγραφα κατά τη διάρκεια της φάσης καθαρισμού ορφανών, επομένως οι εφαρμογές πρέπει να το εξετάσουν όταν σχεδιάζουν τα ερωτήματά τους.
Μετανάστευση σε συγκεκριμένα σενάρια
Σε περιπτώσεις όπως η μετανάστευση δεδομένων μεταξύ των ζωνών με περιοχές με ετικέτες ή από τις μη διαμορφωμένες ρυθμίσεις, το MongoDB μεταναστεύει σταδιακά με βάση τις επικαιροποιημένες σειρές ή τις ζώνες Key SHARD μετά την αναδιάταξη. Για παράδειγμα, η αφαίρεση των παλαιών σειρών ετικετών και η δημιουργία νέων ενεργοποιούν τη μετανάστευση εξισορρόπησης για να μετακινήσετε τα δεδομένα ανάλογα.
Κατά τη μετανάστευση συστάδων MongoDB σε λύσεις που διαχειρίζονται το σύννεφο ή μεταξύ θραυσμένων συστάδων, τα εργαλεία μετανάστευσης συχνά εκτελούν τη μετανάστευση με θραύση, αντιγράφοντας τα δεδομένα Shard ξεχωριστά διατηρώντας παράλληλα τις διανομές βασικών Shard.
Εργαλεία και επιχειρήσεις κοινής ωφέλειας για μετανάστευση
Οι υπηρεσίες μετάδοσης δεδομένων (DTS) και άλλα εργαλεία τρίτου μέρους βοηθούν στη μετεγκατάσταση των δεδομένων μεταξύ των περιπτώσεων ή των συστάδων MongoDB, της χειρισμού χαρτογράφησης Shard, της συνέπειας των δεδομένων και των αυξητικών ενημερώσεων. Αυτά τα εργαλεία συχνά υποστηρίζουν τη μετανάστευση από μη σχισμές σε θραυσμένες συστάδες, αναθέτοντας τις προεπιλεγμένες τιμές κλειδιού shard σε δεδομένα προέλευσης που δεν έχουν κλειδιά θραύσης.
Περίληψη των βασικών σημείων
- Το MongoDB χωρίζει τα δεδομένα σε κομμάτια που διανέμονται σε θραύσματα χρησιμοποιώντας πλήκτρα Shard.
- Ο εξισορροπητής μεταναστεύει αυτόματα κομμάτια για να διατηρήσει την ισορροπημένη κατανομή δεδομένων.
- Η μετανάστευση περιλαμβάνει δεδομένα κλωνοποίησης, γραπτά γράμματα, ατομική παράδοση και ασύγχρονη εκκαθάριση.
- Οι μεταναστεύσεις περιορίζονται σε ένα ανά Shard για τη μείωση του αντίκτυπου του συστήματος.
- Οι εντολές χειροκίνητης μετανάστευσης παρέχουν διοικητικό έλεγχο για τη διανομή των κομματιών.
- Τα ορφανά έγγραφα καθαρίζονται ασύγχρονα μετά τη μετανάστευση.
- Η μετανάστευση επηρεάζει προσωρινά την απόδοση και τη δευτεροβάθμια συνεκτικότητα.
- Η μετανάστευση μεταξύ των ζωνών ή των αλλαγών στις περιοχές Key Shard αντιμετωπίζεται με μεταναστεύσεις που προκαλούν αναδιάρθρωση.
- Τα εργαλεία μετανάστευσης βοηθούν στην κίνηση των δεδομένων μεταξύ ομάδων ή αρχιτεκτονικών.
Αυτός ο μηχανισμός μετανάστευσης διασφαλίζει ότι οι συστάδες MongoDB παραμένουν ισορροπημένες, κλιμακωτές και επιδόσεις καθώς τα δεδομένα αυξάνονται και οι διαμορφώσεις συμπλέγματος εξελίσσονται, παρέχοντας συνεχή διαθεσιμότητα με ελάχιστη διαταραχή στις εφαρμογές.