
Nyligen presenterade grabbarna frÄn LINBIT sin nya SDS-lösning - Linstor. Det Àr en helt fri lagring som bygger pÄ beprövad teknik: DRBD, LVM, ZFS. Linstor kombinerar enkelhet med en vÀl genomarbetad arkitektur, vilket möjliggör stabilitet och ganska imponerande resultat.
I dag skulle jag vilja berÀtta lite mer om det och visa hur enkelt det kan integreras med OpenNebula med hjÀlp av linstor_un - en ny drivrutin som jag har utvecklat speciellt för detta ÀndamÄl.
Linstor i kombination med OpenNebula gör det möjligt att bygga en snabb och pÄlitlig molnplattform som enkelt kan implementeras pÄ egen infrastruktur.
Linstors arkitektur
Linstor Àr varken ett filsystem eller en blocklagring i sig, Linstor Àr en orkestrator som erbjuder ett abstraktionslager för att automatisera skapandet av volymer i LVM eller ZFS och replikera dem med hjÀlp av DRBD9.
Bryter stereotyper
Men vÀnta, DRBD? - Varför automatisera det och hur kan det överhuvudtaget fungera?
LÄt oss minnas det förflutna nÀr DRBD8 var vÀldigt populÀrt. Dess standardanvÀndning innebar att skapa en stor blockenhet och dela upp den i mÄnga smÄ bitar med hjÀlp av samma LVM. En slags mdadm RAID-1 men med replikering över nÀtverket.
Denna metod har sina nackdelar, och dÀrför med införandet av DRBD9 Àndrades principerna för lagringslösningar, nu skapas enskilda DRBD-enheter för varje virtuella maskin.
Metoden med oberoende blockenheter möjliggör en bÀttre utnyttjande av utrymmet i klustret, och ger ocksÄ en rad ytterligare möjligheter. Till exempel kan för varje sÄdan enhet definieras antalet replikat, deras placering och individuella instÀllningar. De Àr enkla att skapa/tas bort, göra snapshots, Àndra storlek, aktivera kryptering och mycket mer. Det Àr vÀrt att notera att DRBD9 ocksÄ stöder quorum, vilket förhindrar split-brain-situationer.
Resurser och backend
Vid skapandet av en ny blockenhet placerar Linstor det nödvÀndiga antalet replikat pÄ olika noder i klustret. Varje sÄdan replik kommer vi att kalla en DRBD-resurs.
Resurser finns i tvÄ typer:
- Dataresurs representerar en DRBD-enhet som Àr placerad pÄ en nod i LVM- eller ZFS-pool.
För nÀrvarande finns det stöd för flera backend och deras antal ökar stÀndigt. Det finns stöd för LVM, ThinLVM och ZFS. De tvÄ sista möjliggör skapande och anvÀndning av snapshots. - Diskless-resurs representerar en DRBD-enhet som Àr placerad pÄ en nod utan backend, men som tillÄter att behandlas som en vanlig blockenhet, alla lÀs-/skrivoperationer kommer att dirigeras till data-resurser. NÀrmaste analog till diskless-resurser Àr iSCSI LUN.
Varje DRBD-resurs kan ha upp till 8 repliker, och endast en av dem kan som standard vara aktivâ PrimĂ€r, alla andra kommer 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 mellan varandra.
Genom att montera DRBD-enheten i systemet blir den automatiskt PrimÀr, vilket innebÀr att Àven en Diskless-resurs, enligt DRBD-terminologin, kan vara PrimÀr.
SÄ varför behövs Linstor?
Genom att lita pÄ alla resursintensiva uppgifter till kÀrnan, fungerar Linstor i grund och botten som en vanlig Java-applikation som enkelt möjliggör automatisering av skapandet av DRBD-resurser.
Varje resurs som skapats av det kommer att vara en oberoende DRBD-kluster som fungerar sjÀlvstÀndigt, oavsett status för kontrollplanet och andra DRBD-resurser.
Linstor bestÄr endast av tvÄ komponenter:
- Linstor-controller â Den huvudsakliga kontrollern som tillhandahĂ„ller ett API för att skapa och hantera resurser. Den kommunicerar ocksĂ„ med satelliterna, kontrollerar tillgĂ€ngligt utrymme pĂ„ dem, och skickar uppdrag för att skapa och ta bort nya resurser. Körs i en enskild instans och anvĂ€nder en databas som kan vara antingen intern (H2) eller extern (PostgreSQL, MySQL, MariaDB)
- Linstor-satellite â Installeras pĂ„ alla storage-noder och ger kontrollern information om ledigt utrymme, samt utför uppgifter mottagna frĂ„n kontrollern för att skapa och ta bort nya volymer och DRBD-enheter ovanpĂ„ dem.
Linstor arbetar med följande nyckelbegrepp:
- Node â en fysisk server pĂ„ vilken DRBD-resurser kommer att skapas och anvĂ€ndas.
- Storage Pool â LVM eller ZFS pool, skapad pĂ„ en nod dĂ€r DRBD-resurser kommer att placeras. Det Ă€r ocksĂ„ möjligt att ha en diskless-pool â en pool dĂ€r endast diskless-resurser kommer att placeras.
- Resursdefinition â Definitionen av resursen, i grund och botten Ă€r det en prototyp som beskriver namnet och alla dess egenskaper.
- Volymdefinition â Definition av volym. Varje resurs kan bestĂ„ av flera volymer, varje volym mĂ„ste ha en storlek.
- Resurs â En skapad instans av ett blockenhet, varje resurs mĂ„ste placeras pĂ„ en viss nod och i nĂ„gon lagringspool.
Installation av Linstor
Jag rekommenderar att anvÀnda Ubuntu som system, eftersom det finns :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateEller Debian, dÀr Linstor kan installeras frÄn det officiella lagret 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 updateController
Det Àr enkelt hÀr:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controllerLagringsnoder
För nÀrvarande levereras en in-tree kÀrnmodul i Linux DRBD8, tyvÀrr passar den inte för oss och vi behöver installera DRBD9:
apt-get install drbd-dkmsSom erfarenheten visar uppstÄr de flesta komplikationerna just pÄ grund av att DRBD8-modulen Àr laddad i systemet, snarare Àn DRBD9. Lyckligtvis Àr det enkelt att kontrollera genom att köra:
modprobe drbd
cat /proc/drbdOm du ser version: 9 â Ă€r allt i ordning, om version: 8 â betyder att nĂ„got har gĂ„tt fel och du mĂ„ste vidta ytterligare Ă„tgĂ€rder för att ta reda pĂ„ orsaken.
Nu ska vi installera linstor-satellite och drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satelliteSkapa en kluster
Lagringspooler och noder
Som backend tar vi ThinLVM, eftersom det Àr den enklaste och stöder snapshots.
Installera lvm2, om du inte har gjort det Ànnu, och lÄt oss skapa en ThinLVM-pool pÄ alla vÄra lagringsnoder:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpoolAlla framtida ÄtgÀrder kan utföras direkt pÄ kontrollern:
Vi lÀgger 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.13Vi skapar 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/thinpoolNu kontrollerar vi de skapade poolerna:
linstor storage-pool listOm allt Àr rÀtt utfört bör vi se nÄgot i stil med:
+-------------------------------------------------------------------------------------------------------+ | StoragePool | Node | Driver | PoolName | FreeCapacity | TotalCapacity | SupportsSnapshots | |-------------------------------------------------------------------------------------------------------| | data | node1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | | data | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | | data | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | true | +-------------------------------------------------------------------------------------------------------+
DRBD-resurser
Nu lÄt oss 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 2LÄt oss kontrollera de skapade resurserna:
linstor resource list +------------------------------------------------------------------------------------------------------+ | Node | Resource | StoragePool | VolumeNr | MinorNr | DeviceName | Allocated | InUse | State | |------------------------------------------------------------------------------------------------------| | node1 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unused | UpToDate | | node2 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Unused | UpToDate | +------------------------------------------------------------------------------------------------------+
UtmĂ€rkt! â vi ser att resursen skapades pĂ„ de första tvĂ„ noderna, vi kan ocksĂ„ försöka skapa en disklös resurs pĂ„ den tredje:
linstor resource create --diskless node3 myresPÄ noderna kommer du alltid att hitta den hÀr enheten som /dev/drbd1084 eller /dev/drbd/by-res/myres/0
SÄ hÀr fungerar Linstor, du kan fÄ mer information frÄn .
Nu ska jag berÀtta hur man integrerar det med OpenNebula
InstÀllning av OpenNebula
Jag kommer inte att gÄ in pÄ djupet om installationsprocessen för OpenNebula, eftersom alla steg Àr detaljerat beskrivna i , som jag rekommenderar att du vÀnder dig till, jag kommer bara att berÀtta om integrationen av OpenNebula med Linstor.
linstor_un
För att lösa detta problem har jag skrivit en egen drivrutin â , för nĂ€rvarande Ă€r den tillgĂ€nglig som en plugin och behöver installeras separat.
Hela installationen sker pÄ frontend OpenNebula-noderna och krÀver inga ytterligare ÄtgÀrder pÄ compute-noderna.
Först mÄste vi se till att vi har jq och linstor-client:
apt-get install jq linstor-clientTeam linstor node list borde visa en lista över noder. Alla compute-noder i OpenNebula borde vara tillagda i Linstor-klustret.
LÄt oss 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-masterNu behöver vi lÀgga till den i OpenNebula-konfigurationen, för detta utför vi de enkla stegen som beskrivs .
DĂ€refter kommer vi att starta om OpenNebula:
systemctl restart opennebulaOch vi lÀgger till vÄra datalager, systemets:
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.confOch bildlagret:
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_PLACEanger antalet data-replikat som kommer att skapas för varje ny bild i OpenNebula. - Parameter
CLONE_MODEanger hur bilder kommer att kopieras vid skapandet av nya virtuella maskiner,snapshotâ kommer att skapa en snapshot av bilden och rulla ut den virtuella maskinen frĂ„n snapshoten,copyâ kommer att göra en fullstĂ€ndig kopia av bilden för varje virtuell maskin. - I
BRIDGE_LISTdet rekommenderas att ange alla noder som ska anvÀndas för att utföra kloningsoperationer av bilder.
En fullstÀndig lista över stödda parametrar finns i för projektet.
Nu Àr instÀllningen klar, och nu kan vi ladda ner en appliance frÄn den officiella och skapa virtuella maskiner frÄn den.
LĂ€nk till projektet:
KĂ€lla: habr.com
