LINSTOR-lagring och dess integration med OpenNebula

LINSTOR-lagring och dess integration med OpenNebula

För inte så länge sedan presenterade killarna från LINBIT sin nya SDS-lösning – Linstor. Detta är en helt gratis lagring baserad på beprövad teknik: DRBD, LVM, ZFS. Linstor kombinerar enkelhet och väldesignad arkitektur, vilket gör att du kan uppnå stabilitet och ganska imponerande resultat.

Idag skulle jag vilja prata om det lite mer i detalj och visa hur enkelt det kan integreras med OpenNebula med hjälp av linstor_un - en ny drivrutin som jag utvecklat speciellt för detta ändamål.

Linstor i kombination med OpenNebula låter dig bygga ett snabbt och pålitligt moln som enkelt kan distribueras på din egen infrastruktur.

Linstor arkitektur

Linstor är varken ett filsystem eller blocklagring i sig, Linstor är en orkestrator som tillhandahåller ett abstraktionslager som låter dig automatisera skapandet av volymer i LVM eller ZFS och replikera dem med DRBD9.

Att bryta stereotyper

Men vänta, DRBD? — Varför automatisera det och hur kan det ens fungera?

Låt oss komma ihåg det förflutna, när DRBD8 var väldigt populärt. Dess standardanvändning innebar att skapa en stor blockenhet och skära den i många små bitar med samma LVM. En sorts mdadm RAID-1 men med replikering över nätverket.

Detta tillvägagångssätt är inte utan sina nackdelar, och därför, med tillkomsten av DRBD9, har principerna för lagringsdesign förändrats; nu skapas en separat DRBD-enhet för varje virtuell maskin.

Tillvägagångssättet med oberoende blockenheter möjliggör bättre utnyttjande av utrymmet i klustret, och lägger också till ett antal ytterligare funktioner. Till exempel, för varje sådan enhet kan du bestämma antalet repliker, deras plats och individuella inställningar. De är lätta att skapa/ta bort, ta ögonblicksbilder, ändra storlek, aktivera kryptering och mycket mer. Det är värt att notera att DRBD9 också stöder kvorum, vilket gör att du kan undvika situationer med split-brain.

Resurser och backends

När du skapar en ny blockenhet placerar Linstor det erforderliga antalet repliker på olika noder i klustret. Vi kommer att kalla varje sådan replik för en DRBD-resurs.

Det finns två typer av resurser:

  • Dataresurs — är en DRBD-enhet placerad på en nod i en LVM- eller ZFS-pool.
    För tillfället finns det stöd för flera backends och deras antal växer ständigt. Det finns stöd för LVM, ThinLVM och ZFS. De två sista låter dig skapa och använda ögonblicksbilder.
  • Disklös resurs — är en DRBD-enhet placerad på en nod utan backend, men tillåter att den behandlas som en vanlig blockenhet; alla läs-/skrivoperationer kommer att omdirigeras till dataresurser. Den närmaste analoga till disklösa resurserna är iSCSI LUN.

Varje DRBD-resurs kan ha upp till 8 repliker, och endast en av dem kan vara aktiv som standard - Primära, kommer alla andra att vara Sekundär och deras användning kommer att vara omöjlig så länge det finns minst en primär, det vill säga de kommer helt enkelt att replikera data sinsemellan.

Genom att installera en DRBD-enhet i systemet blir den automatiskt Primära, så även en disklös resurs, i DRBD-terminologi, kan vara primär.

Så varför behöver du Linstor?

Genom att anförtro alla resurskrävande uppgifter till kärnan är Linstor i huvudsak en vanlig Java-applikation som låter dig enkelt automatisera skapandet av DRBD-resurser.
Dessutom kommer varje resurs som skapas av honom att vara ett oberoende DRBD-kluster som fungerar oberoende, oavsett tillståndet för kontrollplanet och andra DRBD-resurser.

Linstor består av endast två komponenter:

  • Linstor-controller - Huvudkontrollern, som tillhandahåller ett API för att skapa och hantera resurser. Den kommunicerar också med satelliter, kontrollerar det lediga utrymmet på dem och skickar uppgifter för att skapa och ta bort nya resurser. Den körs i en enda instans och använder en databas, som kan vara antingen intern (H2) eller extern (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellit — Installeras på alla lagringsnoder och förser styrenheten med information om ledigt utrymme, och utför även uppgifter som tas emot från styrenheten för att skapa och ta bort nya volymer och DRBD-enheter ovanpå dem.

Linstor arbetar med följande nyckelbegrepp:

  • Nod — En fysisk server på vilken DRBD-resurser kommer att skapas och användas.
  • Förvaringspool — LVM- eller ZFS-pool skapad på noden där DRBD-resurserna kommer att finnas. En disklös pool är också möjlig - detta är en pool där endast disklösa resurser kommer att finnas.
  • Resursdefinition — Definitionen av en resurs är i huvudsak en prototyp som beskriver namnet och alla dess egenskaper.
  • Volymdefinition — Volymdefinition. Varje resurs kan bestå av flera volymer, varje volym måste ha en storlek.
  • Resurs — En skapad instans av en blockenhet, varje resurs måste placeras på en specifik nod och i någon lagringspool.

Linstor installation

Jag rekommenderar att du använder Ubuntu som ett system, eftersom... finns för henne redo PPA:

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

Eller Debian, där Linstor kan installeras från det officiella arkivet för 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

Regulator

Allt är enkelt här:

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

Lagringsnoder

Linux-kärnan levereras för närvarande med en kärnmodul i trädet DRBD8, tyvärr passar det inte oss och vi måste installera DRBD9:

apt-get install drbd-dkms

Som praktiken visar uppstår de flesta svårigheter just för att DRBD8-modulen laddas in i systemet, och inte DRBD9. Lyckligtvis är detta enkelt att kontrollera genom att köra:

modprobe drbd
cat /proc/drbd

Om du ser version: 9 - det betyder att allt är bra om version: 8 - Det betyder att något gick fel och att du måste vidta ytterligare åtgärder för att ta reda på orsakerna.

Låt oss nu installera linstor-satellit и drbd-utils:

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

Skapa ett kluster

Lagringspooler och noder

Som backend tar vi ThinLVM, därför att det är det enklaste och stöder ögonblicksbilder.
Ställ lvm2, om du inte redan har gjort det, låt oss skapa en ThinLVM-pool på alla våra lagringsnoder:

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

Alla ytterligare åtgärder kan utföras direkt på styrenheten:

Låt oss lägga till våra noder:

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

Låt oss skapa lagringspooler:

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

Låt oss nu kontrollera de skapade poolerna:

linstor storage-pool list

Om allt är gjort korrekt bör vi se något som:

+------------------------------------------------ -------------------------------------------------- ----+ | StoragePool | Nod | Förare | Poolnamn | Fri kapacitet | Total Kapacitet | Stöder Snapshots | |-------------------------------------------------------- - -------------------------------------------------- - ---| | data | nod1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | | data | nod2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | | data | nod3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | sant | +------------------------------------------------ -------------------------------------------------- ----+

DRBD-resurser

Låt oss nu försöka skapa vår nya DRBD-resurs:

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

Låt oss kontrollera de skapade resurserna:

linstor resource list 

+------------------------------------------------ -------------------------------------------------- ---+ | Nod | Resurs | StoragePool | VolymNr | MinorNr | Enhetsnamn | Tilldelas | InUse | Stat | |-------------------------------------------------------- - -------------------------------------------------- - --| | nod1 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Oanvänd | Uppdaterad | | nod2 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Oanvänd | Uppdaterad | +------------------------------------------------ -------------------------------------------------- ---+

Bra! — vi ser att resursen skapades på de två första noderna, vi kan också försöka skapa en disklös resurs på den tredje:

linstor resource create --diskless node3 myres

På noder hittar du alltid denna enhet som /dev/drbd1084 eller /dev/drbd/by-res/myres/0

Så här fungerar Linstor kan du få mer information från officiell dokumentation.

Nu ska jag berätta hur du integrerar det med OpenNebula

Konfigurera OpenNebula

Jag ska inte gå för djupt in i OpenNebula-installationsprocessen, eftersom... alla steg beskrivs i detalj i officiell dokumentation, som jag rekommenderar att du kontaktar, ska jag bara berätta om integrationen av OpenNebula med Linstor.

linstor_un

För att lösa detta problem skrev jag min egen drivrutin - linstor_un, det är för närvarande tillgängligt som ett plugin och måste installeras separat.

Hela installationen utförs på frontend OpenNebula-noderna och kräver inga ytterligare åtgärder på beräkningsnoderna.

Först och främst måste vi se till att vi har det jq и linstor-klient:

apt-get install jq linstor-client

Team linstor node list ska visa en lista med noder. Alla OpenNebula-beräkningsnoder måste läggas till i Linstor-klustret.

Ladda ner och installera 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

Nu måste vi lägga till den i OpenNebula-konfigurationen, för att göra detta följer vi de enkla stegen som beskrivs här.

Starta sedan om OpenNebula:

systemctl restart opennebula

Och lägg till våra databutiker, system:

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

Och bildarkivet:

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

  • Parameter AUTO_PLACE visar antalet datarepliker som kommer att skapas för varje ny bild i OpenNebula.
  • Parameter CLONE_MODE indikerar exakt hur bilder kommer att klonas när nya virtuella maskiner skapas, snapshot — kommer att skapa en ögonblicksbild av bilden och distribuera en virtuell maskin från ögonblicksbilden, copy — kommer att göra en komplett kopia av bilden för varje virtuell maskin.
  • В BRIDGE_LIST Det rekommenderas att specificera alla noder som ska användas för att utföra bildkloningsoperationer.

För en komplett lista över parametrar som stöds, se README projektet.

Detta slutför installationen, nu kan du ladda ner någon apparat från tjänstemannen OpenNebula Marketplace och skapa virtuella maskiner från den.

Projektlänk:
https://github.com/OpenNebula/addon-linstor_un

Källa: will.com

Lägg en kommentar