
Nedávno predstavili chlapci z LINBIT svoje nové riešenie SDS – Linstor. Je to úplne open-source úložisko, ktoré využíva osvedčené technológie: DRBD, LVM, ZFS. Linstor kombinuje jednoduchosť a dobre premyslenú architektúru, čo umožňuje dosiahnuť stabilitu a dosť impozantné výsledky.
Dnes by som chcel podrobnejšie predstaviť tento produkt a ukázať, aké jednoduché je ho integrovať s OpenNebula pomocou linstor_un – nového ovládača, ktorý som vyvinul špeciálne na tento účel.
Linstor v kombinácii s OpenNebula umožňuje vytvoriť rýchly a spoľahlivý cloud, ktorý sa dá bez problémov nasadiť na vlastnej infraštruktúre.
Architektúra Linstor
Linstor nie je samotný súborový systém ani blokové úložisko, Linstor je orchestrátor, ktorý poskytuje vrstvu abstrakcie umožňujúcu automatizovať vytváranie objemov v LVM alebo ZFS a replikovať ich pomocou DRBD9.
Lámeme stereotypy
Ale počkajte, DRBD? – Prečo ho automatizovať a ako vlastne môže fungovať?
Spomeňme si na minulost, keď bol DRBD8 veľmi populárny. Jeho štandardné použitie predpokladalo vytvorenie jedného veľkého blokového zariadenia a jeho rozdelenie na mnoho malých častí pomocou toho istého LVM. Niečo ako mdadm RAID-1, ale s replikáciou cez sieť.
Tento prístup nie je bez nedostatkov, a preto s príchodom DRBD9 sa zásady budovania úložiska zmenili, teraz sa pre každú virtuálnu mašinu vytvára samostatné DRBD zariadenie.
Prístup s nezávislými blokovými zariadeniami umožňuje lepšie využiť priestor v klastri a pridáva rad dodatočných možností. Napríklad pre každé také zariadenie je možné určiť počet replik, ich umiestnenie a individuálne nastavenia. Je ich ľahké vytvárať/odstraňovať, robiť snímky, meniť veľkosť, zapínať šifrovanie a mnohé ďalšie. Je dobré poznamenať, že DRBD9 tiež podporuje kvórum, čo pomáha predchádzať situáciám split-brain.
Zdroje a backendy
Pri vytváraní nového blokového zariadenia umiestňuje Linstor požadovaný počet replik na rôznych uzloch v klastri. Každú takúto repliku budeme nazývať DRBD zdrojom.
Zdroje môžu byť dvoch typov:
- Dátový zdroj — predstavujú DRBD zariadenie umiestnené na node v LVM alebo ZFS poole.
V súčasnosti existuje podpora viacerých backendov a ich počet sa neustále zvyšuje. Existuje podpora pre LVM, ThinLVM a ZFS. Posledné dva umožňujú vytvárať a používať snapshoty. - Diskless-zdroj — predstavuje DRBD zariadenie umiestnené na node bez backendu, ale umožňuje s ním zaobchádzať ako s bežným blokovým zariadením, všetky operácie čítania/zápisu budú presmerované na data-zdroje. Najbližší ekvivalent diskless-zdrojom je iSCSI LUN.
Každý DRBD zdroj môže mať až 8 replik, a len jedna z nich môže byť predvolene aktívna — Primárne, všetky ostatné budú Sekundárne a ich použitie nebude možné, pokiaľ existuje aspoň jeden Primárny, teda budú len replikovať údaje medzi sebou.
Montovaním DRBD zariadenia do systému sa automaticky stáva Primárne, takže aj Diskless-zdroj, v terminológii DRBD, môže byť Primárny.
Tak na čo je Linstor?
Dôverujúc všetkým zdrojovo náročným úlohám jadru, Linstor v podstate predstavuje bežnú Java aplikáciu, ktorá umožňuje bez námahy automatizovať vytváranie DRBD zdrojov.
Pritom každý ním vytvorený zdroj bude predstavovať nezávislý DRBD klaster, ktorý pracuje samostatne, bez ohľadu na stav control-plane a ostatných DRBD zdrojov.
Linstor pozostáva iba z dvoch komponentov:
- Linstor-controller — Hlavný kontrolér, ktorý poskytuje API pre vytváranie a správu zdrojov. Tiež komunikuje so satelitmi, kontroluje voľné miesto na nich a posiela úlohy na vytváranie a odstraňovanie nových zdrojov. Spúšťa sa v jedinom inštancii a používa databázu, ktorá môže byť buď vnútorná (H2), alebo vonkajšia (PostgreSQL, MySQL, MariaDB)
- Linstor-satellite — Inštaluje sa na všetky storage nody a poskytuje kontroléru informácie o voľnom mieste, ako aj vykonáva úlohy prijaté od kontroléra na vytváranie a odstraňovanie nových objemov a DRBD zariadení nad nimi.
Linstor operuje s nasledujúcimi kľúčovými pojmami:
- Node — fyzický server, na ktorom budú vytvárané a používané DRBD zdroje.
- Storage Pool — LVM alebo ZFS pool, vytvorený na node, v ktorom budú umiestnené DRBD zdroje. Taktiež je možné diskless-pool — je to pool, v ktorom budú umiestnené len diskless zdroje.
- Definícia Zdroja — Definícia zdroja, v podstate je to prototyp, ktorý popisuje názov a všetky jeho vlastnosti.
- Definícia zväzku — Definícia zväzku. Každý zdroj môže pozostávať z viacerých zväzkov, každý zväzok musí mať veľkosť.
- Zdroje — Vytvorená inštancia blokového zariadenia, každý zdroj musí byť umiestnený na určitej nódě a v nejakom úložnom pooli.
Inštalácia Linstor
Odporúčam použiť systém Ubuntu, pretože preň existuje :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateAlebo Debian, kde Linstor možno nainštalovať z oficiálneho repozitára pre 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 updateOvládač
Tu je to jednoduché:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controllerÚložné nody
V súčasnosti je v jadre Linuxu dodávaný in-tree modul jadra DRBD8, bohužiaľ, ten nám nevyhovuje a musíme nainštalovať DRBD9:
apt-get install drbd-dkmsAko ukazuje prax, väčšina problémov vzniká práve tým, že v systéme je načítaný modul DRBD8, a nie DRBD9. Našťastie to je ľahko overiteľné vykonaním:
modprobe drbd
cat /proc/drbdAk uvidíte version: 9 — znamená to, že je všetko v poriadku, ak version: 8 — znamená to, že niečo nefunguje a musíte podniknúť ďalšie kroky na zistenie príčin.
Teraz nainštalujeme linstor-satellite a drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satelliteVytvorenie klastera
Úložné pooly a nody
Ako backend zoberieme ThinLVM, pretože je to najjednoduchšie a podporuje snímky.
Nainštalujte lvm2, ak ste tak ešte neurobili, a poďme vytvoriť ThinLVM pool na všetkých našich úložných nodách:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpoolVšetky ďalšie kroky môžu byť vykonávané priamo na ovládači:
Pridáme naše nody:
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13Vytvoríme úložné pooly:
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/thinpoolTeraz skontrolujeme vytvorené pooly:
linstor storage-pool listAk bolo všetko vykonané správne, mali by sme vidieť niečo ako:
+-------------------------------------------------------------------------------------------------------+ | 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 zdroje
Teraz skúsime vytvoriť našu novú DRBD zdroj:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2Skontrolujme vytvorené zdroje:
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 | +------------------------------------------------------------------------------------------------------+
Skvele! — vidíme, že zdroj bol vytvorený na prvých dvoch uzloch, môžeme tiež skúsiť vytvoriť diskless zdroj na treťom:
linstor resource create --diskless node3 myresNa uzloch vždy nájdete toto zariadenie ako /dev/drbd1084 alebo /dev/drbd/by-res/myres/0
Takto funguje Linstor, môžete získať viac informácií z .
Teraz vám poviem, ako ho integrovať s OpenNebulou
Nastavenie OpenNebuly
Nechcem sa hlboko zaoberať procesom nastavenia OpenNebuly, keďže všetky kroky sú podrobne popísané v , na ktorú vám odporúčam odkázať, poviem len o integrácii OpenNebuly s Linstorom.
linstor_un
Na vyriešenie tohto problému som napísal vlastný ovládač — , v súčasnosti je dostupný ako plugin a mal by sa inštalovať samostatne.
Celá inštalácia prebieha na frontend OpenNebula uzloch a nevyžaduje ďalšie akcie na compute uzloch.
Najprv sa musíme ubezpečiť, že máme jq a linstor-client:
apt-get install jq linstor-clientTím linstor node list by mal vypísať zoznam uzlov. Všetky compute uzly OpenNebuly by mali byť pridané do klastera Linstor.
Stiahneme a nainštalujeme 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-masterTeraz je potrebné pridať ho do konfigurácie OpenNebula, a to vykonaním jednoduchých krokov, ktoré sú opísané .
Po tom, ako reštartujeme OpenNebula:
systemctl restart opennebulaA pridáme naše datastory, systémové:
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.confA storage obrazov:
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_PLACEzobrazuje počet data-replik, ktoré budú vytvorené pre každý nový obraz v OpenNebula. - Parameter
CLONE_MODEudáva, ako presne budú obrazy klónované pri vytváraní nových virtuálnych strojov,snapshot— vytvorí snapshot obrazu a z tohto snapshotu sa spustí virtuálny stroj,copy— vytvorí úplnú kópiu obrazu pre každý virtuálny stroj. - V
BRIDGE_LISTje odporúčané uviesť všetky uzly, ktoré budú používané na vykonávanie klonovania obrazov.
Úplný zoznam podporovaných parametrov je uvedený v projektu.
Na tomto nastavení je koniec, teraz môžeme načítať nejaký appliance z oficiálneho a vytvoriť z neho virtuálne stroje.
Odkaz na projekt:
Zdroj: habr.com
