Référentiel LINSTOR et son intégration avec OpenNebula


Il n'y a pas si longtemps, les gars de LINBIT ont présenté leur nouvelle solution SDS - Linstor. Il s'agit d'un stockage entièrement gratuit basé sur des technologies éprouvées: DRBD, LVM, ZFS. Linstor combine la simplicité et une architecture bien conçue, ce qui permet une stabilité et des résultats impressionnants.


Aujourd'hui, je voudrais vous en dire un peu plus à ce sujet et montrer à quel point il est facile de l'intégrer à OpenNebula en utilisant linstor_un - un nouveau pilote que j'ai développé spécifiquement à cet effet.


Linstor en combinaison avec OpenNebula vous permet de créer un cloud rapide et fiable qui peut être facilement déployé sur votre propre infrastructure.


Architecture de Linstor


Linstor n'est ni un système de fichiers ni un référentiel de blocs en soi; Linstor est un orchestrateur qui fournit une couche d'abstraction qui automatise la création de volumes dans LVM ou ZFS et les réplique à l'aide de DRBD9.


Briser les stéréotypes

Mais attendez, DRBD? "Pourquoi l'automatiser et comment peut-il même fonctionner?"


Rappelez-vous le passé où DRBD8 était populaire partout. Son utilisation standard impliquait la création d'un grand bloc et le découpait en plusieurs petits morceaux, en utilisant le même LVM. Une sorte de mdadm RAID-1 mais avec réplication sur le réseau.


Cette approche n'est pas sans inconvénients et, par conséquent, avec l'avènement de DRBD9, les principes de la construction du stockage ont changé, maintenant un périphérique DRBD distinct est créé pour chaque machine virtuelle.


L'approche avec des périphériques blocs indépendants vous permet de mieux utiliser l'espace dans le cluster, et ajoute également un certain nombre de fonctionnalités supplémentaires. Par exemple, pour chacun de ces appareils, vous pouvez déterminer le nombre de répliques, leur emplacement et leurs paramètres individuels. Ils sont faciles à créer / supprimer, à créer des instantanés, à redimensionner, à activer le cryptage et bien plus encore. Il convient de noter que DRBD9 prend également en charge le quorum, ce qui évite les situations de cerveau divisé.


Ressources et backends

En créant un nouveau périphérique de bloc, Linstor place le nombre requis de répliques sur différents nœuds du cluster. Nous appellerons chacune de ces répliques une ressource DRBD.


Les ressources sont de deux types:


  • Ressource de données - est un périphérique DRBD situé sur un nœud dans un pool LVM ou ZFS.
    Actuellement, plusieurs backends sont pris en charge et leur nombre ne cesse de croître. Il existe un support pour LVM, ThinLVM et ZFS. Les deux derniers vous permettent de créer et d'utiliser des instantanés.
  • Diskless-resource - est un périphérique DRBD situé sur un nœud sans backend, mais permettant de le traiter comme un périphérique de bloc normal, toutes les opérations de lecture / écriture seront redirigées vers les ressources de données. L'équivalent le plus proche des ressources sans disque est le LUN iSCSI.

Chaque ressource DRBD peut avoir jusqu'à 8 répliques, et une seule d'entre elles peut être active par défaut - Primaire , tout le reste sera Secondaire et leur utilisation sera impossible jusqu'à ce qu'il y ait au moins un Primaire, c'est-à-dire qu'elles se répliqueront simplement entre vous.


Lors du montage d'un périphérique DRBD dans un système, il devient automatiquement principal , de sorte que même une ressource sans disque, dans la terminologie DRBD, peut être principale.


Alors pourquoi avons-nous besoin de Linstor?

Confiant toutes les tâches gourmandes en ressources au noyau, Linstor est essentiellement une application Java régulière qui facilite l'automatisation de la création de ressources DRBD.
De plus, chaque ressource créée par lui sera un cluster DRBD indépendant qui fonctionne indépendamment, indépendamment de l'état du plan de contrôle et des autres ressources DRBD.


Linstor se compose de seulement deux composants:


  • Contrôleur Linstor - 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 eux et envoie des tâches pour créer et supprimer de nouvelles ressources. Il s'exécute dans une seule instance et utilise une base de données, qui peut être interne (H2) ou externe (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellite - Installé sur tous les nœuds de stockage et fournit au contrôleur des informations sur l'espace libre, et effectue également les tâches reçues du contrôleur pour créer et supprimer de nouveaux volumes et périphériques DRBD par-dessus.

Linstor fonctionne avec les concepts clés suivants:


  • Le nœud est un serveur physique sur lequel des ressources DRBD seront créées et utilisées.
  • Pool de stockage - Pool LVM ou ZFS créé sur un nœud dans lequel les ressources DRBD seront placées. Un pool sans disque est également possible - il s'agit d'un pool dans lequel seules les ressources sans disque seront hébergées.
  • Définition de ressource - Une définition de ressource est essentiellement un prototype qui décrit le nom et toutes ses propriétés.
  • Définition du volume - Définition du volume . Chaque ressource peut être composée de plusieurs volumes, chaque volume doit avoir une taille.
  • Ressource - Une instance créée d'un périphérique de bloc, chaque ressource doit être située sur un nœud spécifique et dans un pool de stockage.

Installer Linstor


Je recommande d'utiliser Ubuntu comme système, car Il existe un AAE prêt à l'emploi :


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

Ou Debian, où Linstor peut être installé à partir du référentiel officiel de 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 

Contrôleur

Ici, tout est simple:


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

Noeuds de stockage

Actuellement, le module du noyau DRBD8 dans l'arborescence est fourni dans le noyau Linux, malheureusement il ne nous convient pas et nous devons installer DRBD9 :


 apt-get install drbd-dkms 

Comme le montre la pratique, la plupart des difficultés surviennent précisément parce que le module DRBD8 est chargé dans le système, et non DRBD9. Heureusement, cela est facile à vérifier en faisant:


 modprobe drbd cat /proc/drbd 

Si vous voyez la version: 9 - alors tout va bien, si la version: 8 - alors quelque chose s'est mal passé et vous devez prendre des mesures supplémentaires pour en découvrir les raisons.


Installez maintenant linstor-satellite et drbd-utils :


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

Création de cluster


Pools de stockage et nœuds


Nous prendrons ThinLVM comme backend , comme il est le plus simple et prend en charge les instantanés.
Installez lvm2 si vous ne l'avez pas déjà fait et créons un pool ThinLVM sur tous nos nœuds de stockage:


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

Toutes les autres actions peuvent être effectuées directement sur le contrôleur:


Ajoutez 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.13 

Créez 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/thinpool 

Vérifiez maintenant les pools créés:


 linstor storage-pool list 

Si tout est fait correctement, alors nous devrions voir quelque chose comme:


  + ------------------------------------------------- -------------------------------------------------- ---- +
 |  StoragePool |  Node |  Pilote |  PoolName |  FreeCapacity |  TotalCapacity |  SupportsSnapshots |
 | ------------------------------------------------- -------------------------------------------------- ---- |
 |  données |  node1 |  LVM_THIN |  drbdpool / thinpool |  64 Gio |  64 Gio |  vrai |
 |  données |  node2 |  LVM_THIN |  drbdpool / thinpool |  64 Gio |  64 Gio |  vrai |
 |  données |  node3 |  LVM_THIN |  drbdpool / thinpool |  64 Gio |  64 Gio |  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 2 

Vérifions les ressources créées:


 linstor volume list 

  + ------------------------------------------------- -------------------------------------------------- --- +
 |  Node |  Ressource |  StoragePool |  VolumeNr |  MinorNr |  DeviceName |  Attribué |  InUse |  État |
 | ------------------------------------------------- -------------------------------------------------- --- |
 |  node1 |  myres |  données |  0 |  1084 |  / dev / drbd1084 |  52 KiB |  Inutilisé |  UpToDate |
 |  node2 |  myres |  données |  0 |  1084 |  / dev / drbd1084 |  52 KiB |  Inutilisé |  UpToDate |
 + ------------------------------------------------- -------------------------------------------------- --- + 

Super! - on voit que la ressource a été créée sur les deux premiers nœuds, on peut aussi essayer de créer une ressource sans disque sur le troisième:


 linstor resource create --diskless node3 myres 

Sur les nœuds, vous trouverez toujours cet appareil sous /dev/drbd1084 ou /dev/drbd/by-res/myres/0


C'est ainsi que Linstor fonctionne, vous pouvez obtenir plus d'informations dans la documentation officielle .


Je vais maintenant parler de la façon de l'intégrer à OpenNebula


Configurer OpenNebula


Je n'entrerai pas profondément dans le processus de configuration d'OpenNebula, car toutes les étapes sont décrites en détail dans la documentation officielle , à laquelle je vous recommande de vous tourner, je ne vous parlerai que de l'intégration d'OpenNebula avec Linstor.


linstor_un

Pour résoudre ce problème, j'ai écrit mon propre pilote - linstor_un , pour le moment il est disponible sous forme de plug-in et doit être installé séparément.


Toute l'installation est effectuée sur les nœuds OpenNebula frontaux et ne nécessite pas d'actions supplémentaires sur les nœuds de calcul.


Tout d'abord, nous devons nous assurer que nous avons jq et linstor-client :


 apt-get install jq linstor-client 

La commande linstor node list doit répertorier les nœuds. Tous les nœuds de calcul d'OpenNebula doivent être ajoutés au cluster Linstor.


Téléchargez et installez 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-master 

Maintenant, nous devons l'ajouter à la configuration OpenNebula, pour cela, nous effectuons les étapes simples décrites ici .


Redémarrez ensuite OpenNebula:


 systemctl restart opennebula 

Et ajoutez notre système de banques de données:


 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 

Et stockage d'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 

  • Le paramètre AUTO_PLACE affiche le nombre de répliques de données qui seront créées pour chaque nouvelle image dans OpenNebula.
  • Le paramètre CLONE_MODE indique comment les images seront clonées lors de la création de nouvelles machines virtuelles, snapshot - créera un instantané de l'image et déploiera une machine virtuelle à partir de l'instantané, copy - fera une copie complète de l'image pour chaque machine virtuelle.
  • BRIDGE_LIST recommande de spécifier tous les nœuds qui seront utilisés pour effectuer des opérations de clonage d'image.

Une liste complète des paramètres pris en charge est donnée dans le projet README .


Une fois cette configuration terminée, vous pouvez maintenant télécharger une appliance à partir d' OpenNebula Marketplace officielle et créer des machines virtuelles à partir de celle-ci.


Lien vers le projet

Source: https://habr.com/ru/post/fr451186/


All Articles