Παρασκευή το απόγευμα, το έργο OpenZFS στήθος Έκδοση 2.1.0 του πολυετούς αγαπημένου μας συστήματος αρχείων “Είναι περίπλοκο αλλά αξίζει τον κόπο”. Η νέα έκδοση είναι συμβατή με το FreeBSD 12.2-RELEASE και μεταγενέστερες εκδόσεις, και με πυρήνες Linux 3.10-5.13. Αυτή η έκδοση εισάγει αρκετές γενικές βελτιώσεις απόδοσης, καθώς και μερικές εντελώς νέες δυνατότητες – κυρίως απευθύνονται σε οργανισμούς και άλλες πολύ προχωρημένες περιπτώσεις χρήσης.
Σήμερα, θα επικεντρωθούμε στη μεγαλύτερη δυνατότητα που προσθέτει το OpenZFS 2.1.0 – την τοπολογία dRAID vdev. Το dRAID βρίσκεται σε ενεργή ανάπτυξη τουλάχιστον από το 2015 και έφτασε την κατάσταση beta όταν ολοκληρωμένο Στο OpenZFS master τον Νοέμβριο του 2020. Από τότε, έχει δοκιμαστεί σε μεγάλο βαθμό σε πολλά μεγάλα καταστήματα ανάπτυξης του OpenZFS – πράγμα που σημαίνει ότι η σημερινή έκδοση είναι “φρέσκια” σε κατάσταση παραγωγής, όχι “νέα” όπως σε μη δοκιμασμένη.
Κατανεμημένη επισκόπηση RAID (dRAID)
Εάν πιστεύετε ήδη ότι η τοπολογία ZFS ήταν ένα αρχείο σύνθετος Θέμα, ετοιμαστείτε να σκεφτείτε. Η κατανεμημένη RAID (dRAID) είναι μια εντελώς νέα τοπολογία vdev που συναντήσαμε για πρώτη φορά σε μια παρουσίαση στο 2016 OpenZFS Dev Summit.
Κατά τη δημιουργία ενός dRAID vdev, ο διαχειριστής καθορίζει τον αριθμό των τομέων δεδομένων, ισοτιμίας και hotspare για κάθε ταινία. Αυτοί οι αριθμοί είναι ανεξάρτητοι από τον αριθμό των φυσικών δίσκων στο vdev. Μπορούμε να το δούμε στην πράξη στο ακόλουθο παράδειγμα, το οποίο αφαιρείται από τις βασικές έννοιες του DRAID τεκμηρίωση:
root@box:~# zpool create mypool draid2:4d:1s:11c wwn-0 wwn-1 wwn-2 ... wwn-A
root@box:~# zpool status mypool
pool: mypool
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
draid2:4d:11c:1s-0 ONLINE 0 0 0
wwn-0 ONLINE 0 0 0
wwn-1 ONLINE 0 0 0
wwn-2 ONLINE 0 0 0
wwn-3 ONLINE 0 0 0
wwn-4 ONLINE 0 0 0
wwn-5 ONLINE 0 0 0
wwn-6 ONLINE 0 0 0
wwn-7 ONLINE 0 0 0
wwn-8 ONLINE 0 0 0
wwn-9 ONLINE 0 0 0
wwn-A ONLINE 0 0 0
spares
draid2-0-0 AVAIL
Dredd τοπολογία
Στο παραπάνω παράδειγμα, έχουμε έντεκα δίσκους: wwn-0
Απέναντι wwn-A
. Δημιουργήσαμε ένα draID vdev με 2 συσκευές ισοτιμίας, 4 συσκευές δεδομένων και 1 εφεδρική συσκευή ανά ταινία – σε συμπυκνωμένη γλώσσα, draid2:4:1
.
Παρόλο που έχουμε συνολικά έντεκα δίσκους σε ένα αρχείο draid2:4:1
, μόνο έξι χρησιμοποιούνται σε κάθε γραμμή δεδομένων – και ένα σε κάθε γραμμή φυσικο – φυσικο – ταινία. Σε έναν κόσμο από τέλειες ηλεκτρικές σκούπες, επιφάνειες χωρίς τριβές και όρνιθες, η διάταξη του δίσκου draid2:4:1
Θα μοιάζει με αυτό:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ένα |
μικρό | μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ |
Δρ | μικρό | Δρ | μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό |
Δρ | Δρ | μικρό | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | Δρ | Δρ |
μικρό | μικρό | Δρ | μικρό | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ |
Δρ | Δρ | . | . | μικρό | . | . | . | . | . | . |
. | . | . | . | . | μικρό | . | . | . | . | . |
. | . | . | . | . | . | μικρό | . | . | . | . |
. | . | . | . | . | . | . | μικρό | . | . | . |
. | . | . | . | . | . | . | . | μικρό | . | . |
. | . | . | . | . | . | . | . | . | μικρό | . |
. | . | . | . | . | . | . | . | . | . | μικρό |
Αποτελεσματικά, ο Dredd προχωρά ένα βήμα παραπέρα στην έννοια της “διαγώνιας ισοτιμίας” RAID. Το RAID5 δεν ήταν η πρώτη τοπολογία ισοτιμίας RAID – ήταν RAID3, στην οποία η ισοτιμία εντοπίστηκε σε έναν σκληρό δίσκο, αντί να διανέμεται σε ολόκληρο τον πίνακα.
Το RAID5 εξάλειψε τη μονάδα σκληρής ισοτιμίας και, αντίθετα, διανέμει την ισοτιμία σε όλους τους δίσκους συστοιχιών – παρέχοντας πολύ πιο γρήγορες τυχαίες εγγραφές από εννοιολογικά απλούστερη RAID3, επειδή δεν εμπόδισε κάθε εγγραφή σε έναν σκληρό δίσκο ισοτιμίας.
Το dRAID υιοθετεί αυτήν την ιδέα – κατανομή ισοτιμίας σε όλους τους δίσκους, αντί να συγκεντρώνει όλα σε έναν ή δύο σκληρούς δίσκους – και την επεκτείνει σε spares
. Εάν ο δίσκος αποτύχει στο dRAID vdev, οι τομείς ισοτιμίας και τα δεδομένα που ζουν στον νεκρό δίσκο αντιγράφονται σε έναν εφεδρικό τομέα (ες) που προορίζονται για κάθε ταινία που επηρεάζεται.
Ας πάρουμε το παραπάνω απλοποιημένο γράφημα και να δούμε τι θα συμβεί αν βγάλουμε έναν δίσκο από τη μήτρα. Η αρχική αποτυχία αφήνει κενά στα περισσότερα σύνολα δεδομένων (σε αυτό το απλοποιημένο διάγραμμα, γραμμές):
0 | 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | ένα | |
μικρό | μικρό | μικρό | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | |
Δρ | μικρό | Δρ | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | |
Δρ | Δρ | μικρό | Δρ | μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | |
μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | |
Δρ | Δρ | . | μικρό | . | . | . | . | . | . |
Αλλά όταν χρησιμοποιούμε resilver, το κάνουμε με την προηγουμένως δεσμευμένη πλεονάζουσα χωρητικότητα:
0 | 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | ένα | |
Δρ | μικρό | μικρό | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | |
Δρ | μικρό | Δρ | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | |
Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | |
μικρό | μικρό | Δρ | Δρ | Δρ | Δρ | μικρό | μικρό | Δρ | Δρ | |
Δρ | Δρ | . | μικρό | . | . | . | . | . | . |
Λάβετε υπόψη ότι αυτά τα γραφήματα είναι απλοποιημένο. Η πλήρης εικόνα περιλαμβάνει ομάδες, τμήματα και σειρές στις οποίες δεν θα προσπαθήσουμε να μπείτε εδώ. Η λογική διάταξη ανακατεύεται επίσης τυχαία για να κατανέμεται τα πράγματα ομοιόμορφα σε μονάδες δίσκου με βάση το όφσετ. Όσοι ενδιαφέρονται για τις μικρότερες λεπτομέρειες ενθαρρύνονται να ρίξουν μια ματιά σε αυτές τις λεπτομέρειες Εναιώρημα Στον αρχικό κώδικα δεσμεύστε.
Αξίζει επίσης να σημειωθεί ότι το dRAID απαιτεί στατικά πλάτη λωρίδων – όχι τα δυναμικά πλάτη που υποστηρίζουν τα παραδοσιακά RAIDz1 και RAIDz2 vdevs. Εάν χρησιμοποιούμε δίσκους 4kn, το αρχείο draid2:4:1
Ένα vdev όπως αυτό που φαίνεται παραπάνω θα απαιτούσε 24 KB στο δίσκο ανά μπλοκ μεταδεδομένων, όπου ένα συμβατικό RAIDz2 vdev έξι πλάτους χρειάζεται μόνο 12 KB. Αυτή η απόκλιση επιδεινώνεται όσο υψηλότερες είναι οι τιμές d+p
Παίρνω draid2:8:1
Θα απαιτούσε ένα επιβλητικό 40KB για το ίδιο μπλοκ μεταδεδομένων!
Για το λόγο αυτό, το special
Ο κατανεμητής vdev είναι πολύ χρήσιμος σε ομάδες με dRAID vdevs — όταν η ομάδα είναι με draid2:8:1
και τρία πλάτος special
Πρέπει να αποθηκεύσει ένα μπλοκ μεταδεδομένων 4KiB, το κάνει μόνο σε 12KB σε ένα αρχείο special
, αντί για 40 KB σε ένα αρχείο draid2:8:1
.
DREAD Απόδοση, ανοχή σφαλμάτων και αποπληρωμή
Ως επί το πλείστον, το dRAID vdev θα λειτουργεί παρόμοια με ένα αντίστοιχο σύνολο παραδοσιακών vdevs – για παράδειγμα, draid1:2:0
Σε εννέα δίσκους θα λειτουργήσει σχεδόν ισοδύναμα με ένα σύνολο τριών RAIDz1 vdevs πλάτους 3. Η ανοχή σφαλμάτων είναι επίσης παρόμοια – είστε εγγυημένοι ότι θα επιβιώσετε με μία αποτυχία με p=1
, ακριβώς όπως είστε με RAIDz1 vdevs.
Παρατηρήστε ότι είπαμε ότι η ανοχή σφαλμάτων είναι παρόμοιος, δεν ήταν πανομοιότυπα. Ένα παραδοσιακό σύνολο τριών RAIDz1 vdevs πλάτους 3 είναι εγγυημένο ότι θα επιβιώσει μόνο σε μία αποτυχία δίσκου, αλλά πιθανότατα θα διαρκέσει για ένα δευτερόλεπτο – αρκεί ο δεύτερος δίσκος που αποτυγχάνει να μην είναι μέρος του ίδιου vdev με το πρώτο, όλα είναι καλά .
σε εννέα δίσκους draid1:2
, μια δεύτερη αποτυχία δίσκου θα μπορούσε σχεδόν σίγουρα να σκοτώσει το vdev (και το πακέτο με αυτό), αν Αυτή η αποτυχία εμφανίζεται πριν επιβιώσετε. Δεδομένου ότι δεν υπάρχουν σταθερά σύνολα μεμονωμένων γραμματοσειρών, είναι πολύ πιθανό ότι μια δεύτερη αποτυχία δίσκου θα απενεργοποιήσει επιπλέον τομείς σε ήδη υποβαθμισμένες γραμματοσειρές, ανεξάρτητα από το Οι οποίες Ο δεύτερος δίσκος απέτυχε.
Αυτή η έλλειψη ανοχής σφαλμάτων αντισταθμίζεται κάπως από εκθετικά ταχύτερους χρόνους επανατοποθέτησης. Στο γράφημα στην κορυφή αυτής της ενότητας, μπορούμε να δούμε ότι σε μια παρτίδα ενενήντα δίσκων 16 TB, επαναδιαμορφώνονται σε μια συμβατική και σταθερή μηχανή. spare
Χρειάζονται περίπου τριάντα ώρες, ανεξάρτητα από το πώς διαμορφώνουμε το dRAID vdev – αλλά η επανεμφάνιση της κατανεμημένης απόλυσης μπορεί να διαρκέσει λιγότερο από μία ώρα.
Αυτό οφείλεται σε μεγάλο βαθμό στην αναδιαμόρφωση σε ένα κατανεμημένο διαμέρισμα που διαιρεί το φορτίο εγγραφής μεταξύ όλων των υπόλοιπων δίσκων. Όταν το φοράτε σε παραδοσιακό στυλ spare
, ο ίδιος ο δίσκος δημιουργίας αντιγράφων ασφαλείας είναι ένα εμπόδιο – οι αναγνώσεις προέρχονται από όλους τους δίσκους στο vdev, αλλά όλες οι εγγραφές πρέπει να ολοκληρωθούν με το αντίγραφο ασφαλείας. Αλλά όταν ο κατανεμημένος πλεονασμός χωρητικότητας επανασχεδιαστεί, διαβάζονται και οι δύο Και το Οι φόρτες εργασίας εγγραφής χωρίζονται σε όλους τους υπόλοιπους δίσκους.
Ένα κατανεμημένο resilver μπορεί επίσης να είναι ένα σειριακό resilver, αντί για έναν επεξεργαστή resilver – που σημαίνει ότι το ZFS μπορεί απλά να αντιγράψει όλους τους επηρεαζόμενους τομείς, χωρίς να ανησυχείτε για το τι blocks
Αυτοί οι τομείς ανήκουν. Αντίθετα, τα θεραπευτικά επαναλύματα πρέπει να σαρώσουν ολόκληρο το δέντρο μπλοκ – το οποίο οδηγεί σε τυχαίο φόρτο εργασίας ανάγνωσης, και όχι σε διαδοχικό φόρτο εργασίας ανάγνωσης.
Όταν η φυσική αντικατάσταση του αποτυχημένου δίσκου προστίθεται στο συγκρότημα, αυτή η μεταπώληση θα Είναι βαθμιαίο, όχι διαδοχικό – και θα πνίξει την απόδοση εγγραφής ενός μεμονωμένου εφεδρικού δίσκου, παρά εκείνου ολόκληρου του vdev. Αλλά ο χρόνος για να ολοκληρωθεί αυτή η διαδικασία είναι πολύ λιγότερο σημαντικός, επειδή το vdev δεν είναι καν σε κατάσταση υποβάθμισης.
Συμπεράσματα
Οι εκδόσεις RAID vdevs που διανέμονται συχνά προορίζονται για μεγάλους διακομιστές αποθήκευσης – OpenZFS draid
Ο σχεδιασμός και οι δοκιμές περιστράφηκαν σε μεγάλο βαθμό σε συστήματα 90 δίσκων. Σε μικρότερη κλίμακα, παραδοσιακά αρχεία vdevs και spares
Παραμένει τόσο χρήσιμο όσο και πριν.
Προειδοποιούμε ιδιαίτερα τους αρχάριους στην αποθήκευση να είναι προσεκτικοί μαζί τους draid
– Είναι μια πολύ πιο περίπλοκη διάταξη από την ομαδοποίηση με παραδοσιακά vdevs. Η γρήγορη ευελιξία είναι εξαιρετική – αλλά draid
Επιτυγχάνει επιτυχία τόσο στα επίπεδα πίεσης όσο και σε ορισμένα σενάρια απόδοσης λόγω των αναγκαστικά σταθερών γραμμών.
Ενώ οι παραδοσιακοί δίσκοι συνεχίζουν να αυξάνονται σε μέγεθος χωρίς σημαντική αύξηση της απόδοσης, draid
Η ταχεία αναδιάρθρωσή του μπορεί να γίνει επιθυμητή ακόμη και σε μικρότερα συστήματα – αλλά θα χρειαστεί λίγος χρόνος για να καταλάβουμε ακριβώς πού ξεκινά το ιδανικό σημείο. Εν τω μεταξύ, θυμηθείτε ότι το RAID δεν αποτελεί αντίγραφο ασφαλείας – αυτό περιλαμβάνει draid
!
“Τηλεοπτικός γκουρού. Υποστηρικτής της ζόμπι. Οπαδός του διαδικτύου. Πιστοποιημένος μπύρας. Υπερήφανος αναγνώστης. Φανταστικός αλκοόλ. Βραβευμένος επιχειρηματίας.”