Stockage LINSTOR et son intégration avec OpenNebula

Stockage 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 allie simplicité et architecture bien conçue, ce qui vous permet d'obtenir une stabilité et des résultats assez impressionnants.

Aujourd'hui, je voudrais en parler un peu plus et montrer à quel point il peut être facilement intégré à 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 Linstor

Linstor n'est ni un système de fichiers ni un stockage de blocs en soi, Linstor est un orchestrateur qui fournit une couche d'abstraction pour automatiser la création de volumes dans LVM ou ZFS et les répliquer à l'aide de DRBD9.

Nous brisons les stéréotypes

Mais attendez, DRBD ? - Pourquoi l'automatiser et comment cela peut-il fonctionner ?

Rappelons-nous le passé où DRBD8 était très populaire. Son utilisation standard signifiait la création d'un grand périphérique bloc et sa découpe en plusieurs petits morceaux, en utilisant le même LVM. Une sorte de mdadm RAID-1 mais avec réplication réseau.

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

L'approche de périphérique de bloc indépendant permet une meilleure utilisation de 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, à prendre des instantanés, à redimensionner, à activer le cryptage, etc. Il convient de noter que DRBD9 maintient également un quorum, ce qui évite les situations de split-brain.

Ressources et back-ends

Lors de la création d'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 - représentent un périphérique DRBD situé sur un nœud dans un pool LVM ou ZFS.
    À l'heure actuelle, 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.
  • Ressource sans disque - est un périphérique DRBD hébergé sur un nœud sans backend, mais lui permettant d'être traité comme un périphérique bloc normal, toutes les opérations de lecture/écriture seront redirigées vers les ressources de données. L'analogue le plus proche des ressources sans disque est iSCSI LUN.

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 tant qu'il y aura au moins un Primaire, c'est-à-dire qu'ils répliqueront simplement les données entre eux.

En montant un appareil 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 avons-nous besoin de Linstor ?

En confiant toutes les tâches gourmandes en ressources au noyau, Linstor est essentiellement une application Java standard qui vous permet d'automatiser facilement la création de ressources DRBD.
Dans le même temps, chaque ressource créée par lui sera un cluster DRBD indépendant qui fonctionnera indépendamment, quel que soit 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 la création et la gestion des ressources. Il communique également avec les satellites, vérifie l'espace libre sur eux et envoie des tâches pour créer et supprimer de nouvelles ressources. S'exécute en 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 exécute également les tâches reçues du contrôleur pour créer et supprimer de nouveaux volumes et périphériques DRBD dessus.

Linstor fonctionne avec les concepts clés suivants :

  • Nœud — un serveur physique sur lequel les ressources DRBD seront créées et utilisées.
  • Pool de stockage - Pool LVM ou ZFS créé sur le 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 placées.
  • Définition de ressource - Définition d'une ressource, en fait c'est un prototype qui décrit le nom et toutes ses propriétés.
  • définition des volumes — Définition des volumes. Chaque ressource peut être constituée de plusieurs volumes, chaque volume doit avoir une taille.
  • Ressources - Créé une instance d'un périphérique bloc, chaque ressource doit être placée sur un nœud spécifique et dans un pool de stockage.

Installation de Linstor

Je recommande d'utiliser Ubuntu comme système, car. existe pour elle PPA prêt à l'emploi:

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

Ou Debian, où Linstor peut être installé depuis le dépôt 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

Ici tout est simple:

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

Nœuds de stockage

Le noyau Linux est actuellement livré avec un module de noyau dans l'arborescence DRBD8, malheureusement cela 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 avec le fait que le module DRBD8 est chargé dans le système, et non DRBD9. Heureusement, cela est facile à vérifier en exécutant :

modprobe drbd
cat /proc/drbd

Si tu vois 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 en découvrir les raisons.

Installons maintenant Linstor-satellite и drbd-utils:

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

Créer un cluster

Pools et nœuds de stockage

En tant que backend, nous prendrons ThinLVM, parce que c'est le plus simple et prend en charge les instantanés.
Fixer 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 :

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

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

Vérifions maintenant les pools créés :

linstor storage-pool list

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

+------------------------------------------------------------- -------------------------------------------------- ----+ | Pool de stockage | nœud | chauffeur | nom du pool | capacité libre | capacité totale | Prend en charge les instantanés | |--------------------------------------------------------------- -------------------------------------------------- ----| | données | nœud1 | LVM_THIN | drbdpool/thinpool | 64 Gio | 64 Gio | vrai | | données | nœud2 | LVM_THIN | drbdpool/thinpool | 64 Gio | 64 Gio | vrai | | données | nœud3 | 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 resource list 

+------------------------------------------------------------- -------------------------------------------------- ---+ | nœud | ressource | Pool de stockage | VolumeNr | MineurNr | NomDePériphérique | Alloué | en cours d'utilisation | état | |--------------------------------------------------------------- -------------------------------------------------- ---| | nœud1 | myres | données | 0 | 1084 | /dev/drbd1084 | 52 Ko | Inutilisé | À jour | | nœud2 | myres | données | 0 | 1084 | /dev/drbd1084 | 52 Ko | Inutilisé | À jour | +------------------------------------------------------------- -------------------------------------------------- ---+

Super! - on voit que la ressource a été créée sur les deux premiers noeuds, 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 comme /dev/drbd1084 ou /dev/drbd/by-res/myres/0

C'est ainsi que Linstor fonctionne, vous pouvez obtenir plus d'informations auprès de documents officiels.

Maintenant, je vais parler de la façon de l'intégrer à OpenNebula

Configurer OpenNebula

Je n'irai pas trop loin dans le processus de configuration d'OpenNebula, car Toutes les étapes sont détaillées dans documents officiels, auquel je vous recommande de vous référer, je ne 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, il est actuellement disponible sous forme de plug-in et doit être installé séparément.

L'intégralité de l'installation est effectuée sur les nœuds frontaux OpenNebula et ne nécessite aucune action supplémentaire sur les nœuds de calcul.

Tout d'abord, nous devons nous assurer que nous avons jq и client Linstor:

apt-get install jq linstor-client

Équipe linstor node list devrait afficher une liste de nœuds. Tous les nœuds de calcul OpenNebula doivent être ajoutés au cluster Linstor.

Téléchargez et installez le plug-in :

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 suivons les étapes simples décrites ici.

Redémarrez ensuite OpenNebula :

systemctl restart opennebula

Et ajoutez nos magasins de données, 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.conf

Et le magasin 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

  • Paramètre AUTO_PLACE affiche le nombre de répliques de données qui seront créées pour chaque nouvelle image dans OpenNebula.
  • Paramètre CLONE_MODE indique exactement 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 il est recommandé de spécifier tous les nœuds qui seront utilisés pour effectuer les opérations de clonage d'image.

Pour une liste complète des options prises en charge, voir README le projet.

Ceci termine la configuration, vous pouvez maintenant télécharger certains appareils à partir du site officiel Marché OpenNebula et créer des machines virtuelles à partir de celui-ci.

Ссылка на проект :
https://github.com/OpenNebula/addon-linstor_un

Source: habr.com

Ajouter un commentaire