Αποθηκευτικός χώρος LINSTOR και η ενσωμάτωσή του με το OpenNebula

Αποθηκευτικός χώρος LINSTOR και η ενσωμάτωσή του με το OpenNebula

Πριν από λίγο καιρό, τα παιδιά από το LINBIT παρουσίασαν τη νέα τους λύση SDS - Linstor. Αυτός είναι ένας εντελώς δωρεάν χώρος αποθήκευσης που βασίζεται σε δοκιμασμένες τεχνολογίες: DRBD, LVM, ZFS. Το Linstor συνδυάζει την απλότητα και την καλοσχεδιασμένη αρχιτεκτονική, που σας επιτρέπει να επιτύχετε σταθερότητα και αρκετά εντυπωσιακά αποτελέσματα.

Σήμερα θα ήθελα να μιλήσω λίγο περισσότερο για αυτό και να δείξω πόσο εύκολα μπορεί να ενσωματωθεί με το OpenNebula χρησιμοποιώντας το linstor_un - ένα νέο πρόγραμμα οδήγησης που ανέπτυξα ειδικά για αυτόν τον σκοπό.

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

Αρχιτεκτονική Linstor

Το Linstor δεν είναι ούτε σύστημα αρχείων ούτε μπλοκ αποθήκευσης από μόνο του, ο Linstor είναι ένας ενορχηστρωτής που παρέχει ένα στρώμα αφαίρεσης για την αυτοματοποίηση της δημιουργίας τόμων σε LVM ή ZFS και την αναπαραγωγή τους χρησιμοποιώντας το DRBD9.

Σπάζοντας τα στερεότυπα

Αλλά περιμένετε, DRBD; - Γιατί να το αυτοματοποιήσετε και πώς μπορεί να λειτουργήσει καθόλου;

Ας θυμηθούμε το παρελθόν όταν το DRBD8 ήταν πολύ δημοφιλές. Η τυπική του χρήση σήμαινε τη δημιουργία μιας μεγάλης συσκευής μπλοκ και την κοπή της σε πολλά μικρά κομμάτια, χρησιμοποιώντας το ίδιο LVM. Ένα είδος mdadm RAID-1 αλλά με αναπαραγωγή δικτύου.

Αυτή η προσέγγιση δεν είναι χωρίς μειονεκτήματα, και ως εκ τούτου, με την έλευση του DRBD9, οι αρχές της κατασκευής αποθήκευσης έχουν αλλάξει, τώρα δημιουργείται μια ξεχωριστή συσκευή DRBD για κάθε εικονική μηχανή.

Η προσέγγιση της ανεξάρτητης συσκευής μπλοκ επιτρέπει την καλύτερη χρήση του χώρου στο σύμπλεγμα και προσθέτει επίσης μια σειρά από πρόσθετα χαρακτηριστικά. Για παράδειγμα, για κάθε τέτοια συσκευή, μπορείτε να προσδιορίσετε τον αριθμό των αντιγράφων, τη θέση τους και τις μεμονωμένες ρυθμίσεις. Είναι εύκολο να δημιουργήσετε/διαγράψετε, να τραβήξετε στιγμιότυπα, να αλλάξετε το μέγεθος, να ενεργοποιήσετε την κρυπτογράφηση και πολλά άλλα. Αξίζει να σημειωθεί ότι το DRBD9 διατηρεί επίσης απαρτία, το οποίο αποφεύγει καταστάσεις διχασμού του εγκεφάλου.

Πόροι και backends

Κατά τη δημιουργία μιας νέας συσκευής μπλοκ, το Linstor τοποθετεί τον απαιτούμενο αριθμό αντιγράφων σε διαφορετικούς κόμβους στο σύμπλεγμα. Θα ονομάζουμε κάθε τέτοιο αντίγραφο πόρο DRBD.

Οι πόροι είναι δύο τύπων:

  • Πηγή δεδομένων - αντιπροσωπεύουν μια συσκευή DRBD που βρίσκεται σε έναν κόμβο σε μια ομάδα LVM ή ZFS.
    Αυτή τη στιγμή υπάρχει υποστήριξη για αρκετά backend και ο αριθμός τους αυξάνεται συνεχώς. Υπάρχει υποστήριξη για LVM, ThinLVM και ZFS. Τα δύο τελευταία σάς επιτρέπουν να δημιουργείτε και να χρησιμοποιείτε στιγμιότυπα.
  • Πόρος χωρίς δίσκο - είναι μια συσκευή DRBD που φιλοξενείται σε έναν κόμβο χωρίς backend, αλλά επιτρέποντάς της να αντιμετωπίζεται σαν μια κανονική συσκευή μπλοκ, όλες οι λειτουργίες ανάγνωσης/εγγραφής θα ανακατευθύνονται σε πόρους δεδομένων. Το πλησιέστερο ανάλογο σε πόρους χωρίς δίσκο είναι το iSCSI LUN.

Κάθε πόρος DRBD μπορεί να έχει έως και 8 αντίγραφα και μόνο ένα από αυτά μπορεί να είναι ενεργό από προεπιλογή − πρωταρχικός, όλα τα υπόλοιπα θα είναι Δευτερεύων και η χρήση τους θα είναι αδύνατη εφόσον υπάρχει τουλάχιστον ένα Primary, δηλαδή απλά θα αναπαράγουν δεδομένα μεταξύ τους.

Με την τοποθέτηση μιας συσκευής DRBD στο σύστημα, γίνεται αυτόματα πρωταρχικός, επομένως ακόμη και ένας πόρος χωρίς δίσκους, στην ορολογία DRBD, μπορεί να είναι Κύριος.

Γιατί λοιπόν χρειαζόμαστε το Linstor;

Αναθέτοντας όλες τις εργασίες έντασης πόρων στον πυρήνα, το Linstor είναι ουσιαστικά μια κανονική εφαρμογή Java που σας επιτρέπει να αυτοματοποιείτε εύκολα τη δημιουργία πόρων DRBD.
Ταυτόχρονα, κάθε πόρος που δημιουργείται από αυτόν θα είναι ένα ανεξάρτητο σύμπλεγμα DRBD που λειτουργεί ανεξάρτητα, ανεξάρτητα από την κατάσταση του επιπέδου ελέγχου και άλλων πόρων DRBD.

Το Linstor αποτελείται από δύο μόνο στοιχεία:

  • linstor-ελεγκτής - Ο κύριος ελεγκτής, ο οποίος παρέχει ένα API για τη δημιουργία και τη διαχείριση πόρων. Επικοινωνεί επίσης με δορυφόρους, ελέγχοντας τον ελεύθερο χώρο σε αυτούς και στέλνει θέσεις εργασίας για τη δημιουργία και τη διαγραφή νέων πόρων. Εκτελείται σε μία μόνο παρουσία και χρησιμοποιεί μια βάση δεδομένων που μπορεί να είναι είτε εσωτερική (H2) είτε εξωτερική (PostgreSQL, MySQL, MariaDB)
  • linstor-δορυφόρος - Εγκαθίσταται σε όλους τους κόμβους αποθήκευσης και παρέχει στον ελεγκτή πληροφορίες σχετικά με τον ελεύθερο χώρο και εκτελεί επίσης εργασίες που λαμβάνονται από τον ελεγκτή για τη δημιουργία και τη διαγραφή νέων τόμων και συσκευών DRBD πάνω τους.

Το Linstor λειτουργεί με τις ακόλουθες βασικές έννοιες:

  • Κόμβος — ένας φυσικός διακομιστής στον οποίο θα δημιουργηθούν και θα χρησιμοποιηθούν πόροι DRBD.
  • πισίνα αποθήκευσης - Ο χώρος συγκέντρωσης LVM ή ZFS δημιουργήθηκε στον κόμβο στον οποίο θα τοποθετηθούν οι πόροι DRBD. Είναι επίσης δυνατή μια πισίνα χωρίς δίσκο - αυτή είναι μια πισίνα στην οποία θα τοποθετηθούν μόνο πόροι χωρίς δίσκο.
  • ορισμός πόρων - Ορισμός πόρου, στην πραγματικότητα είναι ένα πρωτότυπο που περιγράφει το όνομα και όλες τις ιδιότητές του.
  • ορισμός όγκου — Ορισμός όγκου. Κάθε πόρος μπορεί να αποτελείται από πολλούς τόμους, κάθε τόμος πρέπει να έχει ένα μέγεθος.
  • Πόρος - Δημιουργήθηκε μια παρουσία μιας συσκευής μπλοκ, κάθε πόρος πρέπει να τοποθετηθεί σε έναν συγκεκριμένο κόμβο και σε κάποιο χώρο αποθήκευσης.

Εγκατάσταση του Linstor

Συνιστώ να χρησιμοποιήσετε το Ubuntu ως σύστημα, γιατί. υπάρχει για αυτήν έτοιμο ΟΛΠ:

add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update

Ή στο Debian, όπου μπορεί να εγκατασταθεί το Linstor από το επίσημο αποθετήριο Proxmox:

wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add -
PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > 
    /etc/apt/sources.list.d/linbit.list
apt-get update

ελεγκτής

Όλα είναι απλά εδώ:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

Κόμβοι αποθήκευσης

Ο πυρήνας του Linux αποστέλλεται προς το παρόν με μια λειτουργική μονάδα πυρήνα σε δέντρο DRBD8, δυστυχώς δεν μας ταιριάζει και πρέπει να το εγκαταστήσουμε DRBD9:

apt-get install drbd-dkms

Όπως δείχνει η πρακτική, οι περισσότερες δυσκολίες προκύπτουν ακριβώς από το γεγονός ότι η μονάδα DRBD8 φορτώνεται στο σύστημα και όχι το DRBD9. Ευτυχώς, αυτό είναι εύκολο να το ελέγξετε εκτελώντας:

modprobe drbd
cat /proc/drbd

Αμα δεις Έκδοση: 9 - όλα είναι καλά αν Έκδοση: 8 - σημαίνει ότι κάτι πήγε στραβά και πρέπει να κάνετε πρόσθετα βήματα για να μάθετε τους λόγους.

Τώρα ας εγκαταστήσουμε linstor-δορυφόρος и drbd-utils:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

Δημιουργήστε ένα σύμπλεγμα

Πισίνες και κόμβοι αποθήκευσης

Ως backend θα πάρουμε ThinLVM, επειδή είναι το πιο απλό και υποστηρίζει στιγμιότυπα.
Σετ lvm2, αν δεν το έχετε κάνει ήδη, και ας δημιουργήσουμε μια πισίνα ThinLVM σε όλους τους κόμβους αποθήκευσης:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

Όλες οι περαιτέρω ενέργειες μπορούν να εκτελεστούν απευθείας στον ελεγκτή:

Ας προσθέσουμε τους κόμβους μας:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

Ας δημιουργήσουμε πισίνες αποθήκευσης:

linstor storage-pool create lvmthin node1 data drbdpool/thinpool
linstor storage-pool create lvmthin node2 data drbdpool/thinpool
linstor storage-pool create lvmthin node3 data drbdpool/thinpool

Τώρα ας ελέγξουμε τις δημιουργημένες ομάδες:

linstor storage-pool list

Εάν όλα γίνονται σωστά, τότε θα πρέπει να δούμε κάτι σαν:

+------------------------------------------------- -------------------------------------------------- ----+ | StoragePool | κόμβος | οδηγός | όνομα πισίνας | ελεύθερη χωρητικότητα | συνολική χωρητικότητα | Υποστηρίζει Στιγμιότυπα | |------------------------------------------------ -------------------------------------------------- ----| | δεδομένα | κόμβος1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | αλήθεια | | δεδομένα | κόμβος2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | αλήθεια | | δεδομένα | κόμβος 3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | αλήθεια | +------------------------------------------------- -------------------------------------------------- ----+

Πόροι DRBD

Τώρα ας προσπαθήσουμε να δημιουργήσουμε τον νέο μας πόρο DRBD:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

Ας ελέγξουμε τους πόρους που δημιουργήθηκαν:

linstor resource list 

+------------------------------------------------- -------------------------------------------------- ---+ | κόμβος | πόρος | StoragePool | Αριθμός τόμου | MinorNr | Όνομα συσκευής | Κατανεμήθηκε | σε χρήση | κράτος | |------------------------------------------------ -------------------------------------------------- ---| | κόμβος1 | μύρες | δεδομένα | 0 | 1084 | /dev/drbd1084 | 52 KiB | Αχρησιμοποίητο | UpToDate | | κόμβος2 | μύρες | δεδομένα | 0 | 1084 | /dev/drbd1084 | 52 KiB | Αχρησιμοποίητο | UpToDate | +------------------------------------------------- -------------------------------------------------- ---+

Εξαιρετική! - βλέπουμε ότι ο πόρος δημιουργήθηκε στους δύο πρώτους κόμβους, μπορούμε επίσης να προσπαθήσουμε να δημιουργήσουμε έναν πόρο χωρίς δίσκο στον τρίτο:

linstor resource create --diskless node3 myres

Στους κόμβους θα βρείτε πάντα αυτή τη συσκευή ως /dev/drbd1084 ή /dev/drbd/by-res/myres/0

Έτσι λειτουργεί το Linstor, μπορείτε να λάβετε περισσότερες πληροφορίες από επίσημη τεκμηρίωση.

Τώρα θα μιλήσω για το πώς να το ενσωματώσω με το OpenNebula

Ρύθμιση του OpenNebula

Δεν θα μπω πολύ βαθιά στη διαδικασία εγκατάστασης του OpenNebula, γιατί Όλα τα βήματα περιγράφονται αναλυτικά στο επίσημη τεκμηρίωση, στο οποίο σας προτείνω να αναφερθείτε, θα μιλήσω μόνο για την ενοποίηση του OpenNebula με το Linstor.

linstor_un

Για να λύσω αυτό το πρόβλημα, έγραψα το δικό μου πρόγραμμα οδήγησης - linstor_un, είναι προς το παρόν διαθέσιμο ως πρόσθετο και πρέπει να εγκατασταθεί ξεχωριστά.

Ολόκληρη η εγκατάσταση εκτελείται στους κόμβους OpenNebula στο frontend και δεν απαιτεί πρόσθετες ενέργειες στους κόμβους υπολογισμού.

Πρώτα απ 'όλα, πρέπει να βεβαιωθούμε ότι έχουμε jq и linstor-client:

apt-get install jq linstor-client

Ομάδα linstor node list θα πρέπει να εμφανίζει μια λίστα με κόμβους. Όλοι οι κόμβοι υπολογιστών OpenNebula πρέπει να προστεθούν στο σύμπλεγμα Linstor.

Κατεβάστε και εγκαταστήστε το πρόσθετο:

curl -L https://github.com/OpenNebula/addon-linstor_un/archive/master.tar.gz | tar -xzvf - -C /tmp

mv /tmp/addon-linstor_un-master/vmm/kvm/* /var/lib/one/remotes/vmm/kvm/

mkdir -p /var/lib/one/remotes/etc/datastore/linstor_un
mv /tmp/addon-linstor_un-master/datastore/linstor_un/linstor_un.conf /var/lib/one/remotes/etc/datastore/linstor_un/linstor_un.conf

mv /tmp/addon-linstor_un-master/datastore/linstor_un /var/lib/one/remotes/datastore/linstor_un
mv /tmp/addon-linstor_un-master/tm/linstor_un /var/lib/one/remotes/tm/linstor_un

rm -rf /tmp/addon-linstor_un-master

Τώρα πρέπει να το προσθέσουμε στη διαμόρφωση OpenNebula, για αυτό ακολουθούμε τα απλά βήματα που περιγράφονται εδώ.

Στη συνέχεια, επανεκκινήστε το OpenNebula:

systemctl restart opennebula

Και προσθέστε τις αποθήκες δεδομένων μας, το σύστημά μας:

cat > system-ds.conf <<EOT
NAME="linstor-system"
TYPE="SYSTEM_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
CLONE_MODE="snapshot"
CHECKPOINT_AUTO_PLACE="1"
BRIDGE_LIST="node1 node2 node3"
TM_MAD="linstor_un"
EOT

onedatastore create system-ds.conf

Και το κατάστημα εικόνων:

cat > images-ds.conf <<EOT
NAME="linstor-images"
TYPE="IMAGE_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
BRIDGE_LIST="node1 node2 node3"
DISK_TYPE="BLOCK"
DS_MAD="linstor_un"
TM_MAD="linstor_un"
EOT

onedatastore create images-ds.conf

  • Παράμετρος AUTO_PLACE εμφανίζει τον αριθμό των αντιγράφων δεδομένων που θα δημιουργηθούν για κάθε νέα εικόνα στο OpenNebula.
  • Παράμετρος CLONE_MODE υποδεικνύει ακριβώς πώς θα κλωνοποιηθούν οι εικόνες κατά τη δημιουργία νέων εικονικών μηχανών, snapshot - θα δημιουργήσει ένα στιγμιότυπο της εικόνας και θα αναπτύξει μια εικονική μηχανή από το στιγμιότυπο, copy - θα δημιουργήσει ένα πλήρες αντίγραφο της εικόνας για κάθε εικονική μηχανή.
  • В BRIDGE_LIST Συνιστάται να προσδιορίσετε όλους τους κόμβους που θα χρησιμοποιηθούν για την εκτέλεση εργασιών κλωνοποίησης εικόνας.

Για μια πλήρη λίστα με τις υποστηριζόμενες επιλογές, βλ README έργο.

Αυτό ολοκληρώνει τη ρύθμιση, τώρα μπορείτε να κατεβάσετε κάποια συσκευή από την επίσημη OpenNebula Marketplace και δημιουργήστε εικονικές μηχανές από αυτό.

Σύνδεσμος έργου:
https://github.com/OpenNebula/addon-linstor_un

Πηγή: www.habr.com

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