Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Τι θα μιλήσουμε:
Πώς να αναπτύξετε γρήγορα κοινόχρηστο χώρο αποθήκευσης για δύο διακομιστές που βασίζονται σε λύσεις drbd+ocfs2.

Σε ποιον θα είναι χρήσιμο αυτό:
Το σεμινάριο θα είναι χρήσιμο για τους διαχειριστές συστήματος και οποιονδήποτε επιλέγει μια μέθοδο υλοποίησης αποθήκευσης ή θέλει να δοκιμάσει τη λύση.

Ποιες αποφάσεις αρνηθήκαμε και γιατί;

Συχνά βρισκόμαστε αντιμέτωποι με μια κατάσταση όπου χρειάζεται να εφαρμόσουμε κοινόχρηστο χώρο αποθήκευσης με καλή απόδοση ανάγνωσης-εγγραφής σε ένα μικρό σύμπλεγμα ιστού. Δοκιμάσαμε διάφορες επιλογές για την εφαρμογή κοινόχρηστου χώρου αποθήκευσης για τα έργα μας, αλλά λίγοι ήταν σε θέση να μας ικανοποιήσουν σε πολλούς δείκτες ταυτόχρονα. Τώρα θα σας πούμε γιατί.

  • Το Glusterfs δεν μας ικανοποίησε με την απόδοση ανάγνωσης και γραφής, υπήρχαν προβλήματα με την ταυτόχρονη ανάγνωση μεγάλου αριθμού αρχείων και υπήρχε μεγάλο φορτίο στη CPU. Το πρόβλημα με την ανάγνωση αρχείων θα μπορούσε να λυθεί με την απευθείας πρόσβαση σε αυτά από τούβλο, αλλά αυτό δεν ισχύει πάντα και είναι γενικά εσφαλμένο.

  • Ο Ceph δεν άρεσε η υπερβολική πολυπλοκότητα, η οποία μπορεί να είναι επιβλαβής σε έργα με 2-4 διακομιστές, ειδικά εάν το έργο διατηρηθεί στη συνέχεια. Και πάλι, υπάρχουν σοβαροί περιορισμοί απόδοσης που μας αναγκάζουν να δημιουργήσουμε ξεχωριστά συμπλέγματα αποθήκευσης, όπως συμβαίνει με τα glusterf.

  • Η χρήση ενός διακομιστή NFS για την υλοποίηση κοινόχρηστου χώρου αποθήκευσης εγείρει ερωτήματα όσον αφορά την ανοχή σφαλμάτων.

  • Το s3 είναι μια εξαιρετική δημοφιλής λύση για ένα συγκεκριμένο εύρος εργασιών, αλλά δεν είναι σύστημα αρχείων που περιορίζει το πεδίο εφαρμογής του.

  • lsyncd. Εάν έχουμε ήδη αρχίσει να μιλάμε για "συστήματα μη αρχείων", τότε αξίζει να εξετάσουμε αυτήν τη δημοφιλή λύση. Όχι μόνο δεν είναι κατάλληλο για αμφίδρομη ανταλλαγή (αλλά αν το θέλετε πραγματικά, τότε μπορείτε), επίσης δεν λειτουργεί σταθερά σε μεγάλο αριθμό αρχείων. Μια ωραία προσθήκη στο όλο θέμα είναι ότι είναι μονόκλωστο. Ο λόγος βρίσκεται στην αρχιτεκτονική του προγράμματος: χρησιμοποιεί το inotify για την παρακολούθηση αντικειμένων εργασίας, τα οποία εκχωρεί κατά την εκκίνηση και κατά την εκ νέου σάρωση. Το rsync χρησιμοποιείται ως μέσο μεταφοράς.

Εκμάθηση: πώς να αναπτύξετε κοινόχρηστο χώρο αποθήκευσης με βάση το drbd+ocfs2

Μια από τις πιο βολικές λύσεις για εμάς ήταν ο σύνδεσμος ocfs2+drbd. Τώρα θα σας πούμε πώς μπορείτε να αναπτύξετε γρήγορα κοινόχρηστο χώρο αποθήκευσης για δύο διακομιστές με βάση μια βάση δεδομένων λύσεων. Αλλά πρώτα, λίγα για τα εξαρτήματα:

DRBD - ένα σύστημα αποθήκευσης από την τυπική διανομή Linux που σας επιτρέπει να αναπαράγετε δεδομένα μεταξύ διακομιστών σε μπλοκ. Η κύρια εφαρμογή είναι η δημιουργία αποθηκευτικού χώρου με ανοχή σε σφάλματα.

OCFS2 - ένα σύστημα αρχείων που παρέχει κοινή χρήση της ίδιας αποθήκευσης από πολλά συστήματα. Περιλαμβάνεται στη διανομή Linux και είναι μια λειτουργική μονάδα πυρήνα και εργαλεία χώρου χρηστών για εργασία με το FS. Το OCFS2 μπορεί να χρησιμοποιηθεί όχι μόνο μέσω DRBD, αλλά και μέσω iSCSI με πολλαπλές συνδέσεις. Στο παράδειγμά μας χρησιμοποιούμε DRBD.

Όλες οι ενέργειες εκτελούνται στον διακομιστή ubuntu 18.04 σε ελάχιστη διαμόρφωση.

Βήμα 1. Διαμόρφωση του DRBD:

Στο αρχείο /etc/drbd.d/drbd0.res περιγράφουμε τη συσκευή εικονικού μπλοκ μας /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

εσωτερικός μετα-δίσκος — χρησιμοποιήστε τις ίδιες συσκευές μπλοκ για την αποθήκευση μεταδεδομένων
συσκευή /dev/drbd0 — χρησιμοποιήστε το /dev/drbd0 ως διαδρομή προς τον τόμο drbd.
δίσκος /dev/vdb1 - χρησιμοποιήστε το /dev/vdb1
syncer { rate 1000M; } — χρήση εύρους ζώνης καναλιού gigabit
επιτρέπω-δύο-πρωτοβάθμιες - μια σημαντική επιλογή που επιτρέπει την αποδοχή αλλαγών σε δύο κύριους διακομιστές
μετά-sb-0pri, after-sb-1pri, after-sb-2pri — επιλογές που είναι υπεύθυνες για τις ενέργειες του κόμβου όταν ανιχνεύεται splitbrain. Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην τεκμηρίωση.
γίνει-πρωτογενής-και στα δύο — ορίζει και τους δύο κόμβους σε πρωτεύον.

Στην περίπτωσή μας, έχουμε δύο απολύτως πανομοιότυπα VM, με αποκλειστικό εικονικό δίκτυο με εύρος ζώνης 10 gigabit.

Στο παράδειγμά μας, τα ονόματα δικτύου δύο κόμβων συμπλέγματος είναι drbd1 και drbd2. Για σωστή λειτουργία, πρέπει να αντιστοιχίσετε τα ονόματα και τις διευθύνσεις IP των κεντρικών υπολογιστών στο /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Βήμα 2. Ρύθμιση κόμβων:

Και στους δύο διακομιστές τρέχουμε:

drbdadm create-md drbd0

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Παίρνουμε τα εξής:

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Μπορείτε να ξεκινήσετε το συγχρονισμό. Στον πρώτο κόμβο πρέπει να εκτελέσετε:

drbdadm primary --force drbd0

Ας δούμε την κατάσταση:

cat /proc/drbd

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Τέλεια, ο συγχρονισμός ξεκίνησε. Περιμένουμε μέχρι το τέλος και βλέπουμε την εικόνα:

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Βήμα 3. Ξεκινήστε το συγχρονισμό στον δεύτερο κόμβο:

drbdadm primary --force drbd0

Παίρνουμε τα εξής:

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Τώρα μπορούμε να γράψουμε στο drbd από δύο διακομιστές.

Βήμα 4. Εγκαταστήστε και διαμορφώστε το ocfs2.

Θα χρησιμοποιήσουμε μια αρκετά ασήμαντη διαμόρφωση:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Πρέπει να καταγραφεί /etc/ocfs2/cluster.conf και στους δύο κόμβους.

Δημιουργούμε ένα FS στο drbd0 σε οποιονδήποτε κόμβο:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Εδώ δημιουργήσαμε ένα σύστημα αρχείων με την ετικέτα testVol στο drbd0, χρησιμοποιώντας τις προεπιλεγμένες παραμέτρους.

Αποθήκευση συμπλέγματος για μικρά συμπλέγματα ιστού που βασίζονται στο drbd+ocfs2

Στο /etc/default/o2cb πρέπει να ορίσετε (όπως στο αρχείο ρυθμίσεών μας)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

και εκτελέστε σε κάθε κόμβο:

o2cb register-cluster ocfs2cluster

Στη συνέχεια, ενεργοποιούμε και προσθέτουμε όλες τις μονάδες που χρειαζόμαστε για την αυτόματη εκτέλεση:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Κάποια από αυτά θα εκτελούνται ήδη κατά τη διαδικασία εγκατάστασης.

Βήμα 5. Προσθέστε σημεία προσάρτησης στο fstab και στους δύο κόμβους:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Ευρετήριο /μέσα/κοινόχρηστο πρέπει να δημιουργηθεί εκ των προτέρων.

Εδώ χρησιμοποιούμε τις επιλογές noauto, που σημαίνει ότι το αρχείο δεν θα προσαρτηθεί κατά την εκκίνηση (προτιμώ να προσαρτώ αρχεία δικτύου μέσω systemd) και heartbeat=local, που σημαίνει χρήση της υπηρεσίας καρδιακών παλμών σε κάθε κόμβο. Υπάρχει επίσης παγκόσμιος καρδιακός παλμός, ο οποίος είναι πιο κατάλληλος για μεγάλα σμήνη.

Στη συνέχεια μπορείτε να τοποθετήσετε /μέσα/κοινόχρηστο και ελέγξτε τον συγχρονισμό περιεχομένου.

Έγινε! Ως αποτέλεσμα, έχουμε περισσότερο ή λιγότερο αποθηκευτικό χώρο ανεκτικό σε σφάλματα με επεκτασιμότητα και αξιοπρεπή απόδοση.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο