Visai neseniai vaikinai iš LINBIT pristatė savo naują SDS sprendimą – Linstor. Tai visiškai nemokama saugykla, pagrįsta patikrintomis technologijomis: DRBD, LVM, ZFS. Linstor sujungia paprastumą ir gerai suplanuotą architektūrą, leidžiančią pasiekti stabilumo ir gana įspūdingų rezultatų.
Šiandien norėčiau apie tai pakalbėti šiek tiek išsamiau ir parodyti, kaip lengvai jį galima integruoti su OpenNebula naudojant linstor_un – naują tvarkyklę, kurią sukūriau specialiai šiam tikslui.
„Linstor“ kartu su „OpenNebula“ leidžia sukurti greitą ir patikimą debesį, kurį galima lengvai įdiegti savo infrastruktūroje.
Linstor architektūra
„Linstor“ nėra nei failų sistema, nei blokų saugykla, o „Linstor“ yra orkestruotojas, suteikiantis abstrakcijos sluoksnį, leidžiantį automatizuoti tomų kūrimą LVM arba ZFS ir atkartoti juos naudojant DRBD9.
Stereotipų laužymas
Bet palauk, DRBD? — Kam tai automatizuoti ir kaip ji gali veikti?
Prisiminkime praeitį, kai DRBD8 buvo labai populiarus. Standartinis jo naudojimas apėmė vieno didelio blokinio įrenginio sukūrimą ir supjaustymą į daug mažų gabalėlių, naudojant tą patį LVM. Savotiškas mdadm RAID-1, bet su replikacija tinkle.
Šis požiūris nėra be trūkumų, todėl, atsiradus DRBD9, pasikeitė saugyklos projektavimo principai, dabar kiekvienai virtualiai mašinai sukuriamas atskiras DRBD įrenginys.
Nepriklausomų blokinių įrenginių metodas leidžia geriau išnaudoti erdvę klasteryje, taip pat prideda daugybę papildomų funkcijų. Pavyzdžiui, kiekvienam tokiam įrenginiui galite nustatyti kopijų skaičių, jų vietą ir individualius nustatymus. Juos lengva sukurti / ištrinti, daryti momentines nuotraukas, keisti dydį, įjungti šifravimą ir dar daugiau. Verta paminėti, kad DRBD9 taip pat palaiko kvorumą, o tai leidžia išvengti smegenų padalijimo.
Ištekliai ir užpakalinės programos
Kurdamas naują blokinį įrenginį, „Linstor“ įdeda reikiamą skaičių kopijų skirtinguose klasterio mazguose. Kiekvieną tokią kopiją vadinsime DRBD šaltiniu.
Yra dviejų tipų ištekliai:
- Duomenų šaltinis — yra DRBD įrenginiai, esantys LVM arba ZFS telkinio mazge.
Šiuo metu palaikomos kelios užpakalinės programos ir jų skaičius nuolat auga. Yra LVM, ThinLVM ir ZFS palaikymas. Paskutiniai du leidžia kurti ir naudoti momentines nuotraukas. - Išteklius be disko — yra DRBD įrenginys, patalpintas mazge be užpakalinės sistemos, tačiau leidžiantis jį traktuoti kaip įprastą blokinį įrenginį; visos skaitymo / rašymo operacijos bus nukreiptos į duomenų išteklius. Artimiausias bedisko išteklių analogas yra iSCSI LUN.
Kiekvienas DRBD šaltinis gali turėti iki 8 kopijų ir tik viena iš jų gali būti aktyvi pagal numatytuosius nustatymus – Pagrindinis, visi kiti bus Vidurinis ir jų naudojimas bus neįmanomas tol, kol bus bent vienas pirminis, tai yra, jie tiesiog atkartos duomenis tarpusavyje.
Įdiegus DRBD įrenginį į sistemą, jis automatiškai tampa Pagrindinis, taigi net be disko ištekliai, DRBD terminologija, gali būti pirminiai.
Taigi kodėl jums reikia „Linstor“?
Patikėdamas visas daug išteklių reikalaujančias užduotis branduoliui, „Linstor“ iš esmės yra įprasta „Java“ programa, leidžianti lengvai automatizuoti DRBD išteklių kūrimą.
Be to, kiekvienas jo sukurtas išteklius bus nepriklausomas DRBD klasteris, veikiantis savarankiškai, nepriklausomai nuo valdymo plokštumos ir kitų DRBD išteklių būsenos.
Linstor sudaro tik du komponentai:
- Linstor-valdiklis - Pagrindinis valdiklis, teikiantis API kūrimui ir išteklių valdymui. Jis taip pat palaiko ryšį su palydovais, tikrina juose esančią laisvą vietą ir siunčia užduotis naujiems ištekliams kurti ir ištrinti. Jis veikia vienu atveju ir naudoja duomenų bazę, kuri gali būti vidinė (H2) arba išorinė (PostgreSQL, MySQL, MariaDB).
- Linstor-palydovas — Įdiegta visuose saugojimo mazguose ir teikia valdikliui informaciją apie laisvą vietą, taip pat atlieka iš valdiklio gautas užduotis, kad sukurtų ir pašalintų naujus tomus ir DRBD įrenginius.
„Linstor“ veikia pagal šias pagrindines koncepcijas:
- mazgas — fizinis serveris, kuriame bus kuriami ir naudojami DRBD ištekliai.
- Sandėliavimo baseinas — LVM arba ZFS telkinys, sukurtas mazge, kuriame bus DRBD ištekliai. Taip pat galimas baseinas be disko - tai yra baseinas, kuriame bus tik resursai be disko.
- Išteklių apibrėžimas — Ištekliaus apibrėžimas iš esmės yra prototipas, apibūdinantis pavadinimą ir visas jo savybes.
- Garso apibrėžimas — Tūrio apibrėžimas. Kiekvienas išteklius gali sudaryti iš kelių tomų, kiekvienas tomas turi turėti savo dydį.
- Išteklių — Sukurtas blokinio įrenginio egzempliorius, kiekvienas išteklius turi būti patalpintas tam tikrame mazge ir tam tikrame saugojimo telkinyje.
Linstor montavimas
Rekomenduoju naudoti Ubuntu kaip sistemą, nes... egzistuoja jai
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
Arba „Debian“, kur „Linstor“ galima įdiegti iš oficialios „Proxmox“ saugyklos:
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
kontrolierius
Čia viskas paprasta:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller
Saugojimo mazgai
„Linux“ branduolys šiuo metu pristatomas su medyje esančiu branduolio moduliu DRBD8, deja, mums netinka ir reikia įdiegti DRBD9:
apt-get install drbd-dkms
Kaip rodo praktika, daugiausia sunkumų kyla būtent todėl, kad į sistemą įkeliamas DRBD8 modulis, o ne DRBD9. Laimei, tai lengva patikrinti paleidus:
modprobe drbd
cat /proc/drbd
Jei matai versija: 9 - tai reiškia, kad viskas gerai, jei versija: 8 - tai reiškia, kad kažkas nutiko ir jums reikia imtis papildomų veiksmų, kad išsiaiškintumėte priežastis.
Dabar įdiegkime linstor-palydovas и drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite
Sukurkite klasterį
Sandėliavimo baseinai ir mazgai
Kaip backend mes imsimės ThinLVM, nes tai paprasčiausias ir palaiko momentines nuotraukas.
Nustatyti lvm2, jei dar to nepadarėte, sukurkime ThinLVM telkinį visuose mūsų saugojimo mazguose:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool
Visi kiti veiksmai gali būti atliekami tiesiogiai valdikliu:
Pridėkime savo mazgus:
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13
Sukurkime saugyklos baseinus:
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
Dabar patikrinkime sukurtus baseinus:
linstor storage-pool list
Jei viskas padaryta teisingai, turėtume pamatyti kažką panašaus į:
+-------------------------------------------------- -------------------------------------------------- ----+ | StorageBool | Mazgas | Vairuotojas | PoolName | FreeCapacity | TotalCapacity | Palaiko momentines nuotraukas | |------------------------------------------------ - ------------------------------------------------- ---| | duomenys | mazgas1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | tiesa | | duomenys | mazgas2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | tiesa | | duomenys | mazgas3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | tiesa | +-------------------------------------------------- -------------------------------------------------- ----+
DRBD ištekliai
Dabar pabandykime sukurti savo naują DRBD šaltinį:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2
Patikrinkime sukurtus išteklius:
linstor resource list
+-------------------------------------------------- -------------------------------------------------- ---+ | Mazgas | Šaltinis | StorageBool | TomasNr | MinorNr | Įrenginio pavadinimas | Skirta | InUse | Valstybė | |------------------------------------------------ - ------------------------------------------------- --| | mazgas1 | myres | duomenys | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nenaudotas | UpToDate | | mazgas2 | myres | duomenys | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nenaudotas | UpToDate | +-------------------------------------------------- -------------------------------------------------- ---+
Puiku! - matome, kad išteklius buvo sukurtas pirmuosiuose dviejuose mazguose, taip pat galime pabandyti sukurti išteklius be disko trečiajame:
linstor resource create --diskless node3 myres
Mazguose visada rasite šį įrenginį kaip /dev/drbd1084
arba /dev/drbd/by-res/myres/0
Taip veikia Linstor, daugiau informacijos galite gauti iš
Dabar aš jums pasakysiu, kaip integruoti jį su „OpenNebula“.
„OpenNebula“ nustatymas
Per daug nesigilinsiu į „OpenNebula“ sąrankos procesą, nes... visi žingsniai yra išsamiai aprašyti
linstor_un
Norėdami išspręsti šią problemą, parašiau savo tvarkyklę -
Visas diegimas atliekamas priekiniuose OpenNebula mazguose ir nereikalauja papildomų veiksmų skaičiavimo mazguose.
Pirmiausia turime įsitikinti, kad turime jq и linstor-klientas:
apt-get install jq linstor-client
Komanda linstor node list
turėtų rodyti mazgų sąrašą. Visi OpenNebula skaičiavimo mazgai turi būti įtraukti į Linstor klasterį.
Atsisiųskite ir įdiekite papildinį:
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
Dabar turime pridėti jį prie „OpenNebula“ konfigūracijos, kad tai padarytume, atliksime paprastus aprašytus veiksmus
Tada iš naujo paleiskite OpenNebula:
systemctl restart opennebula
Ir pridėkite mūsų duomenų saugyklas, sistemą:
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
Ir vaizdų parduotuvė:
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
- Parametras
AUTO_PLACE
rodomas duomenų kopijų, kurios bus sukurtos kiekvienam naujam vaizdui OpenNebula, skaičius. - Parametras
CLONE_MODE
tiksliai nurodo, kaip vaizdai bus klonuojami kuriant naujas virtualias mašinas,snapshot
— sukurs momentinę vaizdo kopiją ir įdiegs virtualią mašiną iš momentinės nuotraukos,copy
— sukurs pilną kiekvienos virtualios mašinos vaizdo kopiją. - В
BRIDGE_LIST
Rekomenduojama nurodyti visus mazgus, kurie bus naudojami vaizdo klonavimo operacijoms atlikti.
Išsamų palaikomų parametrų sąrašą žr
Tai užbaigia sąranką, dabar galite atsisiųsti tam tikrą prietaisą iš oficialaus
Projekto nuoroda:
Šaltinis: www.habr.com