Archiviazione LINSTOR e sua integrazione con OpenNebula

Archiviazione LINSTOR e sua integrazione con OpenNebula

Non molto tempo fa, i ragazzi di LINBIT hanno presentato la loro nuova soluzione SDS: Linstor. Si tratta di uno spazio di archiviazione completamente gratuito basato su tecnologie collaudate: DRBD, LVM, ZFS. Linstor combina semplicità e architettura ben progettata, che consente di ottenere stabilità e risultati davvero impressionanti.

Oggi vorrei parlarne un po' più in dettaglio e mostrare con quanta facilità può essere integrato con OpenNebula utilizzando linstor_un, un nuovo driver che ho sviluppato appositamente per questo scopo.

Linstor in combinazione con OpenNebula ti consente di creare un cloud veloce e affidabile che può essere facilmente distribuito sulla tua infrastruttura.

Architettura Linstor

Linstor non è né un file system né un block storage di per sé, Linstor è un orchestratore che fornisce un livello di astrazione che consente di automatizzare la creazione di volumi in LVM o ZFS e replicarli utilizzando DRBD9.

Stereotipi di rottura

Ma aspetta, DRBD? — Perché automatizzarlo e come può funzionare?

Ricordiamo il passato, quando DRBD8 era molto popolare. Il suo utilizzo standard prevedeva la creazione di un dispositivo a blocchi di grandi dimensioni e il taglio in tanti piccoli pezzi, utilizzando lo stesso LVM. Una sorta di mdadm RAID-1 ma con replica in rete.

Questo approccio non è privo di inconvenienti e pertanto, con l'avvento di DRBD9, i principi di progettazione dello storage sono cambiati; ora viene creato un dispositivo DRBD separato per ciascuna macchina virtuale.

L'approccio con dispositivi a blocchi indipendenti consente un migliore utilizzo dello spazio nel cluster e aggiunge anche una serie di funzionalità aggiuntive. Ad esempio, per ciascuno di questi dispositivi è possibile determinare il numero di repliche, la loro posizione e le impostazioni individuali. Sono facili da creare/eliminare, scattare istantanee, ridimensionare, abilitare la crittografia e molto altro. Vale la pena notare che DRBD9 supporta anche il quorum, che consente di evitare situazioni di split-brain.

Risorse e backend

Quando si crea un nuovo dispositivo a blocchi, Linstor inserisce il numero richiesto di repliche su diversi nodi del cluster. Chiameremo ciascuna di queste repliche una risorsa DRBD.

Esistono due tipi di risorse:

  • Risorsa dati — sono un dispositivo DRBD situato su un nodo in un pool LVM o ZFS.
    Al momento sono supportati diversi backend e il loro numero è in costante crescita. È disponibile il supporto per LVM, ThinLVM e ZFS. Gli ultimi due consentono di creare e utilizzare istantanee.
  • Risorsa senza disco — è un dispositivo DRBD posizionato su un nodo senza backend, ma che consente di essere trattato come un normale dispositivo a blocchi; tutte le operazioni di lettura/scrittura verranno reindirizzate alle risorse dati. L'analogo più vicino alle risorse diskless è iSCSI LUN.

Ciascuna risorsa DRBD può avere fino a 8 repliche e solo una di esse può essere attiva per impostazione predefinita: Primario, lo saranno tutti gli altri Secondario e il loro utilizzo sarà impossibile finché esisterà almeno un Primario, ovvero replicheranno semplicemente i dati tra loro.

Installando un dispositivo DRBD nel sistema, diventa automaticamente Primario, quindi anche una risorsa senza disco, nella terminologia DRBD, può essere primaria.

Allora perché hai bisogno di Linstor?

Affidando tutte le attività ad alta intensità di risorse al kernel, Linstor è essenzialmente una normale applicazione Java che consente di automatizzare facilmente la creazione di risorse DRBD.
Inoltre, ogni risorsa da lui creata sarà un cluster DRBD indipendente che opera in modo indipendente, indipendentemente dallo stato del piano di controllo e delle altre risorse DRBD.

Linstor è costituito da soli due componenti:

  • Controller Linstor - Il controller principale, che fornisce un'API per la creazione e la gestione delle risorse. Comunica anche con i satelliti, controllando lo spazio libero su di essi e invia attività per creare ed eliminare nuove risorse. Funziona in una singola istanza e utilizza un database, che può essere interno (H2) o esterno (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellite — Installato su tutti i nodi di archiviazione e fornisce al controller informazioni sullo spazio libero ed esegue anche le attività ricevute dal controller per creare ed eliminare nuovi volumi e dispositivi DRBD su di essi.

Linstor opera con i seguenti concetti chiave:

  • Nodo — un server fisico su cui verranno create e utilizzate le risorse DRBD.
  • Pool di archiviazione — Pool LVM o ZFS creato sul nodo in cui verranno posizionate le risorse DRBD. È anche possibile un pool senza disco: si tratta di un pool in cui verranno posizionate solo le risorse senza disco.
  • Definizione delle risorse — La definizione di una risorsa è essenzialmente un prototipo che descrive il nome e tutte le sue proprietà.
  • Definizione del volume — Definizione del volume. Ogni risorsa può essere costituita da più volumi, ogni volume deve avere una dimensione.
  • Gestione — Un'istanza creata di un dispositivo a blocchi, ciascuna risorsa deve essere posizionata su un nodo specifico e in qualche pool di archiviazione.

Installazione Linstor

Consiglio di utilizzare Ubuntu come sistema, perché... esiste per lei PPP pronto:

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

Oppure Debian, dove Linstor può essere installato dal repository ufficiale di 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

Controller

Tutto è semplice qui:

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

Nodi di archiviazione

Il kernel Linux attualmente viene fornito con un modulo del kernel nell'albero DRBD8, purtroppo non è adatto a noi e dobbiamo installarlo DRBD9:

apt-get install drbd-dkms

Come dimostra la pratica, la maggior parte delle difficoltà sorgono proprio perché nel sistema è caricato il modulo DRBD8 e non DRBD9. Fortunatamente, questo è facile da verificare eseguendo:

modprobe drbd
cat /proc/drbd

Se tu vedi Versione: 9 - significa che va tutto bene se Versione: 8 - significa che qualcosa è andato storto ed è necessario intraprendere ulteriori azioni per scoprirne le ragioni.

Ora installiamo linstor-satellite и drbd-utils:

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

Crea un gruppo

Pool di archiviazione e nodi

Come backend prenderemo ThinLVM, Perché è il più semplice e supporta le istantanee.
Set lvm2, se non l'hai già fatto, creiamo un pool ThinLVM su tutti i nostri nodi di storage:

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

Tutte le ulteriori azioni possono essere eseguite direttamente sul controller:

Aggiungiamo i nostri nodi:

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

Creiamo storage pool:

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

Ora controlliamo i pool creati:

linstor storage-pool list

Se tutto è fatto correttamente, dovremmo vedere qualcosa del tipo:

+------------------------------------------------- -------------------------------------------------- ----+ | Piscina di archiviazione | Nodo | Autista | NomePool | Capacità libera | Capacità totale | Supporta istantanee | |------------------------------------------------ - ------------------------------------------------- - ---| | dati | nodo1 | LVM_THIN | drbdpool/thinpool | 64GiB | 64GiB | vero | | dati | nodo2 | LVM_THIN | drbdpool/thinpool | 64GiB | 64GiB | vero | | dati | nodo3 | LVM_THIN | drbdpool/thinpool | 64GiB | 64GiB | vero | +------------------------------------------------- -------------------------------------------------- ----+

Risorse DRBD

Ora proviamo a creare la nostra nuova risorsa DRBD:

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

Controlliamo le risorse create:

linstor resource list 

+------------------------------------------------- -------------------------------------------------- ---+ | Nodo | Risorsa | Piscina di archiviazione | VolumeNr | MinoreNr | NomeDispositivo | Assegnato | Inuso | Stato | |------------------------------------------------ - ------------------------------------------------- - --| | nodo1 | mire | dati | 0| 1084| /dev/drbd1084 | 52 KiB | Inutilizzato | Aggiornato | | nodo2 | mire | dati | 0| 1084| /dev/drbd1084 | 52 KiB | Inutilizzato | Aggiornato | +------------------------------------------------- -------------------------------------------------- ---+

Grande! — vediamo che la risorsa è stata creata sui primi due nodi, possiamo anche provare a creare una risorsa diskless sul terzo:

linstor resource create --diskless node3 myres

Sui nodi troverai sempre questo dispositivo come /dev/drbd1084 o /dev/drbd/by-res/myres/0

Ecco come funziona Linstor, da cui puoi ottenere maggiori informazioni documentazione ufficiale.

Ora ti dirò come integrarlo con OpenNebula

Configurazione di OpenNebula

Non andrò troppo in profondità nel processo di configurazione di OpenNebula, perché... tutti i passaggi sono descritti in dettaglio in documentazione ufficiale, a cui vi consiglio di rivolgervi, vi parlerò solo dell'integrazione di OpenNebula con Linstor.

linstor_un

Per risolvere questo problema, ho scritto il mio driver: linstor_un, è attualmente disponibile come plug-in e deve essere installato separatamente.

L'intera installazione viene effettuata sui nodi frontend OpenNebula e non richiede azioni aggiuntive sui nodi di calcolo.

Prima di tutto dobbiamo assicurarci di averlo fatto jq и cliente-linstor:

apt-get install jq linstor-client

Squadra linstor node list dovrebbe visualizzare un elenco di nodi. Tutti i nodi di calcolo OpenNebula devono essere aggiunti al cluster Linstor.

Scarica e installa il 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

Ora dobbiamo aggiungerlo alla configurazione di OpenNebula, per fare ciò seguiamo i semplici passaggi descritti qui.

Quindi riavvia OpenNebula:

systemctl restart opennebula

E aggiungi i nostri archivi dati, sistema:

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

E l'archivio immagini:

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

  • Parametro AUTO_PLACE mostra il numero di repliche di dati che verranno create per ogni nuova immagine in OpenNebula.
  • Parametro CLONE_MODE indica esattamente come verranno clonate le immagini durante la creazione di nuove macchine virtuali, snapshot — creerà uno snapshot dell'immagine e distribuirà una macchina virtuale dallo snapshot, copy - creerà una copia completa dell'immagine per ciascuna macchina virtuale.
  • В BRIDGE_LIST Si consiglia di specificare tutti i nodi che verranno utilizzati per eseguire le operazioni di clonazione dell'immagine.

Per un elenco completo dei parametri supportati, vedere README il progetto.

Questo completa la configurazione, ora puoi scaricare alcuni apparecchi dal sito ufficiale Mercato OpenNebula e creare macchine virtuali da esso.

Suggerimenti per il progetto:
https://github.com/OpenNebula/addon-linstor_un

Fonte: habr.com

Aggiungi un commento