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
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
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
linstor_un
För att lösa detta problem skrev jag min egen drivrutin -
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
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
Detta slutför installationen, nu kan du ladda ner någon apparat från tjänstemannen
Projektlänk:
Källa: will.com