
Il n'y a pas si longtemps, les gars de LINBIT ont prĂ©sentĂ© leur nouvelle solution SDS â Linstor. C'est un stockage complĂštement libre basĂ© sur des technologies Ă©prouvĂ©es : DRBD, LVM, ZFS. Linstor allie simplicitĂ© et architecture bien conçue, ce qui permet d'atteindre une stabilitĂ© et des rĂ©sultats assez impressionnants.
Aujourd'hui, je voudrais en parler un peu plus en dĂ©tail et montrer Ă quel point il est simple de l'intĂ©grer avec OpenNebula en utilisant linstor_un â un nouveau pilote que j'ai dĂ©veloppĂ© spĂ©cialement pour cela.
Linstor, associĂ© Ă OpenNebula, permet de construire un cloud rapide et fiable, qui peut ĂȘtre dĂ©ployĂ© sans problĂšme sur une infrastructure propre.
Architecture de Linstor
Linstor n'est ni un systÚme de fichiers ni un stockage en bloc à lui seul, Linstor est un orchestrateur qui fournit une couche d'abstraction permettant d'automatiser la création de volumes dans LVM ou ZFS et de les répliquer avec DRBD9.
Bousculons les stéréotypes
Mais attendez, DRBD ? â Pourquoi l'automatiser et comment cela peut-il fonctionner ?
Souvenons-nous du passé, lorsque DRBD8 était trÚs populaire. Son utilisation standard supposait la création d'un grand dispositif de blocs et la découpe de celui-ci en plusieurs petits morceaux, à l'aide de LVM. Une sorte de RAID-1 mdadm mais avec réplique sur le réseau.
Ce type d'approche n'est pas sans défauts, et c'est pourquoi avec l'arrivée de DRBD9, les principes de construction du stockage ont changé, désormais pour chaque machine virtuelle, un dispositif DRBD distinct est créé.
L'approche avec des dispositifs de blocs indépendants permet une meilleure utilisation de l'espace dans le cluster, et ajoute une série de possibilités supplémentaires. Par exemple, pour chaque dispositif, on peut définir le nombre de répliques, leur emplacement et des réglages individuels. Il est facile de les créer/détruire, de faire des instantanés, de modifier leur taille, d'activer le chiffrement et bien plus encore. Il est à noter que DRBD9 prend également en charge le quorum, ce qui permet d'éviter les situations de split-brain.
Ressources et backends
En crĂ©ant un nouveau dispositif de blocs, Linstor place le nombre requis de rĂ©pliques sur diffĂ©rentes nĆuds dans le cluster. Chaque rĂ©plique sera appelĂ©e ressource DRBD.
Les ressources se divisent en deux types :
- Ressource de donnĂ©es â reprĂ©sentent un dispositif DRBD situĂ© sur un nĆud dans un pool LVM ou ZFS.
Actuellement, il y a un support pour plusieurs backends et leur nombre ne cesse d'augmenter. Le support de LVM, ThinLVM et ZFS est disponible. Les deux derniers permettent de crĂ©er et d'utiliser des snapshots. - Ressource sans disque â reprĂ©sente un dispositif DRBD situĂ© sur un nĆud sans backend, mais permettant d'interagir avec lui comme avec un dispositif de bloc classique, toutes les opĂ©rations de lecture/Ă©criture seront redirigĂ©es vers des ressources de donnĂ©es. L'analogue le plus proche des ressources sans disque est un LUN iSCSI.
Chaque ressource DRBD peut avoir jusqu'Ă 8 rĂ©pliques, et une seule d'entre elles peut ĂȘtre active par dĂ©faut â Primaire, toutes les autres seront Secondaire et leur utilisation sera impossible tant qu'il y a au moins un Primaire, c'est-Ă -dire qu'elles rĂ©pliqueront simplement les donnĂ©es entre elles.
En montant le dispositif DRBD dans le systĂšme, il devient automatiquement Primaire, ainsi mĂȘme une ressource sans disque, dans la terminologie DRBD, peut ĂȘtre Primaire.
Alors, pourquoi a-t-on besoin de Linstor ?
En confiant toutes les tùches gourmandes en ressources au noyau, Linstor se présente essentiellement comme une application Java ordinaire qui permet d'automatiser facilement la création de ressources DRBD.
Chaque ressource créée sera un cluster DRBD indépendant, qui fonctionne de maniÚre autonome, indépendamment de l'état du plan de contrÎle et des autres ressources DRBD.
Linstor se compose de deux composants :
- Linstor-controller â Le contrĂŽleur principal, qui fournit une API pour crĂ©er et gĂ©rer des ressources. Il communique Ă©galement avec les satellites, vĂ©rifiant l'espace libre sur ceux-ci, et envoie des tĂąches pour la crĂ©ation et la suppression de nouvelles ressources. Il est exĂ©cutĂ© en instance unique et utilise une base de donnĂ©es qui peut ĂȘtre interne (H2) ou externe (PostgreSQL, MySQL, MariaDB).
- Linstor-satellite â S'installe sur tous les nĆuds de stockage et fournit au contrĂŽleur des informations sur l'espace disponible, ainsi qu'exĂ©cute des tĂąches reçues du contrĂŽleur pour crĂ©er et supprimer de nouveaux volumes et des dispositifs DRBD au-dessus d'eux.
Linstor opÚre avec les concepts clés suivants :
- NĆud â un serveur physique, sur lequel les ressources DRBD seront créées et utilisĂ©es.
- Storage Pool â un pool LVM ou ZFS, créé sur le nĆud oĂč les ressources DRBD seront hĂ©bergĂ©es. Un pool sans disque est Ă©galement possible â c'est un pool qui ne contiendra que des ressources sans disque.
- DĂ©finition de la ressource â DĂ©finition de la ressource, c'est essentiellement un prototype qui dĂ©crit le nom et toutes ses propriĂ©tĂ©s.
- DĂ©finition du volume â DĂ©finition d'un volume. Chaque ressource peut ĂȘtre composĂ©e de plusieurs volumes, chaque volume doit avoir une taille.
- Ressource â Instance créée d'un dispositif de bloc, chaque ressource doit ĂȘtre placĂ©e sur un certain nĆud et dans un pool de stockage.
Installation de Linstor
Je recommande d'utiliser Ubuntu, car il existe :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateOu Debian, oĂč Linstor peut ĂȘtre installĂ© depuis le dĂ©pĂŽt officiel pour 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 updateContrĂŽleur
Ici, c'est simple :
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controllerNĆuds de stockage
Actuellement, le noyau Linux fournit un module de noyau in-tree DRBD8, malheureusement il ne nous convient pas et nous devons installer DRBD9:
apt-get install drbd-dkmsDans la pratique, la plupart des difficultĂ©s surviennent lorsque le module DRBD8 est chargĂ© dans le systĂšme, et non DRBD9. Heureusement, cela peut ĂȘtre facilement vĂ©rifiĂ© en exĂ©cutant :
modprobe drbd
cat /proc/drbdSi vous voyez version: 9 â tout va bien, si version: 8 â cela signifie que quelque chose s'est mal passĂ© et que vous devez prendre des mesures supplĂ©mentaires pour comprendre les raisons.
Maintenant, installons linstor-satellite et drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satelliteCréation du cluster
Pools de stockage et nĆuds
Pour le backend, nous allons prendre ThinLVM, car c'est le plus simple et qu'il prend en charge les instantanés.
Installez lvm2, si vous ne l'avez pas encore fait, crĂ©ons un pool ThinLVM sur tous nos nĆuds de stockage :
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpoolToutes les actions suivantes peuvent ĂȘtre effectuĂ©es directement sur le contrĂŽleur :
Ajoutons nos nĆuds :
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13Créons des pools de stockage :
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/thinpoolVérifions maintenant les pools créés :
linstor storage-pool listSi tout a été fait correctement, nous devrions voir quelque chose comme :
+-------------------------------------------------------------------------------------------------------+ | StockagePool | NĆud | Pilote | NomDuPool | CapacitĂ©Libre | CapacitĂ©Totale | SupporteLesSnapshots | |-------------------------------------------------------------------------------------------------------| | donnĂ©es | nĆud1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vrai | | donnĂ©es | nĆud2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vrai | | donnĂ©es | nĆud3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vrai | +-------------------------------------------------------------------------------------------------------+
Ressources DRBD
Essayons maintenant de créer notre nouvelle ressource DRBD :
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2Vérifions les ressources créées :
linstor resource list +------------------------------------------------------------------------------------------------------+ | NĆud | Ressource | StockagePool | NumĂ©roVolume | MinorNr | NomDuDispositif | AllouĂ© | EnUtilisation | Ătat | |------------------------------------------------------------------------------------------------------| | nĆud1 | myres | donnĂ©es | 0 | 1084 | /dev/drbd1084 | 52 KiB | Non utilisĂ© | Ă jour | | nĆud2 | myres | donnĂ©es | 0 | 1084 | /dev/drbd1084 | 52 KiB | Non utilisĂ© | Ă jour | +------------------------------------------------------------------------------------------------------+
Excellent ! â nous voyons que la ressource a Ă©tĂ© créée sur les deux premiers nĆuds, nous pouvons Ă©galement essayer de crĂ©er une ressource sans disque sur le troisiĂšme :
linstor resource create --diskless nĆud3 myresSur les nĆuds, vous trouverez toujours cet appareil comme /dev/drbd1084 ou /dev/drbd/by-res/myres/0
C'est ainsi que fonctionne Linstor, vous pouvez obtenir plus d'informations Ă partir de .
Je vais maintenant parler de l'intégration avec OpenNebula
Configuration d'OpenNebula
Je ne vais pas entrer dans les détails sur le processus de configuration d'OpenNebula, car toutes les étapes sont décrites en détail dans , que je vous recommande de consulter, je vais juste parler de l'intégration d'OpenNebula avec Linstor.
linstor_un
Pour rĂ©soudre ce problĂšme, j'ai Ă©crit mon propre pilote â , actuellement il est disponible sous forme de plugin et doit ĂȘtre installĂ© sĂ©parĂ©ment.
Toute l'installation se fait sur les nĆuds frontend d'OpenNebula et ne nĂ©cessite aucune action supplĂ©mentaire sur les nĆuds compute.
Tout d'abord, nous devons nous assurer que nous avons jq et linstor-client:
apt-get install jq linstor-clientCommande linstor node list devrait afficher la liste des nĆuds. Tous les nĆuds compute d'OpenNebula doivent ĂȘtre ajoutĂ©s au cluster Linstor.
Téléchargeons et installons le plugin :
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-masterMaintenant, nous devons l'ajouter à la configuration OpenNebula, pour cela, nous suivons les étapes simples décrites .
AprÚs cela, nous redémarrerons OpenNebula :
systemctl restart opennebulaEt nous ajouterons nos datastores, systĂšme :
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.confEt le stockage des images :
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- ParamĂštre
AUTO_PLACEindique le nombre de répliques de données qui seront créées pour chaque nouvelle image dans OpenNebula. - ParamÚtre
CLONE_MODEindique comment les images seront clonĂ©es lors de la crĂ©ation de nouvelles machines virtuelles,snapshotâ un snapshot de l'image sera créé et la machine virtuelle sera dĂ©ployĂ©e Ă partir du snapshot,copyâ une copie complĂšte de l'image sera faite pour chaque machine virtuelle. - Dans
BRIDGE_LISTil est recommandĂ© d'indiquer tous les nĆuds qui seront utilisĂ©s pour effectuer les opĂ©rations de clonage des images.
La liste complĂšte des paramĂštres pris en charge est fournie dans .
à ce stade, la configuration est terminée, vous pouvez maintenant charger un appliance depuis le et créer des machines virtuelles à partir de celle-ci.
Lien vers le projet :
Source : habr.com
