LINSTOR úložisko a jeho integrácia s OpenNebula

LINSTOR úložisko a jeho integrácia s OpenNebula

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 pripravené PPA:

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

Alebo 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 update

Ovlá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-dkms

Ako 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/drbd

Ak 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-satellite

Vytvorenie 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/thinpool

Vš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.13

Vytvorí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/thinpool

Teraz skontrolujeme vytvorené pooly:

linstor storage-pool list

Ak 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 2

Skontrolujme 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 myres

Na 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 oficiálnej dokumentácii.

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 oficiálnej dokumentácii, 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č — linstor_un, 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-client

Tí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-master

Teraz je potrebné pridať ho do konfigurácie OpenNebula, a to vykonaním jednoduchých krokov, ktoré sú opísané tu.

Po tom, ako reštartujeme OpenNebula:

systemctl restart opennebula

A 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.conf

A 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_PLACE zobrazuje počet data-replik, ktoré budú vytvorené pre každý nový obraz v OpenNebula.
  • Parameter CLONE_MODE udá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_LIST je odporúčané uviesť všetky uzly, ktoré budú používané na vykonávanie klonovania obrazov.

Úplný zoznam podporovaných parametrov je uvedený v README projektu.

Na tomto nastavení je koniec, teraz môžeme načítať nejaký appliance z oficiálneho OpenNebula Marketplace a vytvoriť z neho virtuálne stroje.

Odkaz na projekt:
https://github.com/OpenNebula/addon-linstor_un

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster