Nie je to tak dávno, čo chalani z LINBIT predstavili svoje nové SDS riešenie - Linstor. Ide o úplne bezplatné úložisko založené na osvedčených technológiách: DRBD, LVM, ZFS. Linstor kombinuje jednoduchosť a dobre navrhnutú architektúru, čo vám umožňuje dosiahnuť stabilitu a celkom pôsobivé výsledky.
Dnes by som o tom chcel hovoriť trochu podrobnejšie a ukázať, ako ľahko sa dá integrovať s OpenNebula pomocou linstor_un - nového ovládača, ktorý som vyvinul špeciálne pre tento účel.
Linstor v kombinácii s OpenNebula vám umožňuje vybudovať rýchly a spoľahlivý cloud, ktorý možno jednoducho nasadiť na vašej vlastnej infraštruktúre.
Linstorova architektúra
Linstor nie je ani súborový systém, ani blokové úložisko ako také, Linstor je orchestrátor, ktorý poskytuje abstrakciu, ktorá vám umožňuje automatizovať vytváranie zväzkov v LVM alebo ZFS a replikovať ich pomocou DRBD9.
Prelomenie stereotypov
Ale počkať, DRBD? — Prečo to automatizovať a ako to vôbec môže fungovať?
Spomeňme si na minulosť, keď bol DRBD8 veľmi populárny. Jeho štandardné použitie zahŕňalo vytvorenie jedného veľkého blokového zariadenia a jeho rozrezanie na veľa malých častí pomocou rovnakého LVM. Druh mdadm RAID-1, ale s replikáciou cez sieť.
Tento prístup nie je bez nevýhod, a preto sa s príchodom DRBD9 zmenili princípy dizajnu úložiska, teraz je pre každý virtuálny stroj vytvorené samostatné zariadenie DRBD.
Prístup s nezávislými blokovými zariadeniami umožňuje lepšie využitie priestoru v klastri a pridáva aj množstvo ďalších funkcií. Pre každé takéto zariadenie môžete napríklad určiť počet replík, ich umiestnenie a individuálne nastavenia. Ľahko sa vytvárajú/odstraňujú, robia snímky, menia veľkosť, umožňujú šifrovanie a mnoho ďalšieho. Stojí za zmienku, že DRBD9 tiež podporuje kvórum, čo vám umožňuje vyhnúť sa situáciám s rozštiepeným mozgom.
Zdroje a backendy
Pri vytváraní nového blokového zariadenia Linstor umiestni požadovaný počet replík na rôzne uzly v klastri. Každú takúto repliku budeme nazývať zdrojom DRBD.
Existujú dva typy zdrojov:
- Zdroj údajov — sú zariadením DRBD umiestneným na uzle v oblasti LVM alebo ZFS.
V súčasnosti existuje podpora pre niekoľko backendov a ich počet neustále rastie. K dispozícii je podpora pre LVM, ThinLVM a ZFS. Posledné dve vám umožňujú vytvárať a používať snímky. - Bezdiskový zdroj — je zariadenie DRBD umiestnené na uzle 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 dátové zdroje. Najbližším analógom bezdiskových prostriedkov je iSCSI LUN.
Každý zdroj DRBD môže mať až 8 replík a iba jedna z nich môže byť štandardne aktívna - Primárne, všetci ostatní budú Sekundárny a ich použitie bude nemožné, pokiaľ bude existovať aspoň jedna primárna, to znamená, že budú medzi sebou jednoducho replikovať údaje.
Inštaláciou zariadenia DRBD do systému sa automaticky stáva Primárne, teda aj bezdiskový zdroj v terminológii DRBD môže byť primárny.
Tak prečo potrebujete Linstora?
Tým, že všetky úlohy náročné na zdroje zveríte jadru, Linstor je v podstate bežnou Java aplikáciou, ktorá vám umožňuje jednoducho automatizovať vytváranie zdrojov DRBD.
Navyše každý ním vytvorený zdroj bude nezávislým klastrom DRBD, ktorý funguje nezávisle, bez ohľadu na stav riadiacej roviny a iných zdrojov DRBD.
Linstor pozostáva iba z dvoch komponentov:
- Linstor-ovládač - Hlavný kontrolér, ktorý poskytuje API na vytváranie a správu zdrojov. Komunikuje tiež so satelitmi, kontroluje na nich voľné miesto a posiela úlohy na vytvorenie a odstránenie nových zdrojov. Beží v jednej inštancii a používa databázu, ktorá môže byť interná (H2) alebo externá (PostgreSQL, MySQL, MariaDB)
- Linstor-satelit — Nainštalované na všetkých úložných uzloch a poskytuje radiču informácie o voľnom priestore a tiež vykonáva úlohy prijaté z radiča na vytváranie a odstraňovanie nových zväzkov a zariadení DRBD nad nimi.
Linstor pracuje s nasledujúcimi kľúčovými konceptmi:
- Uzol — fyzický server, na ktorom sa budú vytvárať a používať prostriedky DRBD.
- Skladovací bazén — Oblasť LVM alebo ZFS vytvorená na uzle, v ktorom sa budú nachádzať zdroje DRBD. Možný je aj bezdiskový fond – ide o fond, v ktorom budú umiestnené iba bezdiskové prostriedky.
- Definícia zdroja — Definícia zdroja je v podstate prototyp, ktorý popisuje názov a všetky jeho vlastnosti.
- Definícia objemu — Definícia objemu. Každý zdroj môže pozostávať z viacerých zväzkov, každý zväzok musí mať veľkosť.
- Prostriedky — Vytvorená inštancia blokového zariadenia, každý zdroj musí byť umiestnený na konkrétnom uzle a v nejakej úložnej oblasti.
Inštalácia Linstor
Odporúčam používať Ubuntu ako systém, pretože... existuje pre ňu
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
Alebo Debian, kde je možné nainštalovať Linstor z oficiálneho úložiska 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
kontrolór
Všetko je jednoduché tu:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller
Úložné uzly
Linuxové jadro sa v súčasnosti dodáva s modulom jadra v strome DRBD8, bohužiaľ nám nevyhovuje a potrebujeme nainštalovať DRBD9:
apt-get install drbd-dkms
Ako ukazuje prax, väčšina ťažkostí vzniká práve preto, že do systému je načítaný modul DRBD8, a nie DRBD9. Našťastie sa to dá ľahko skontrolovať spustením:
modprobe drbd
cat /proc/drbd
Ak vidíte Verzia: 9 - to znamená, že všetko je v poriadku, ak Verzia: 8 - znamená to, že sa niečo pokazilo a musíte vykonať ďalšie kroky, aby ste zistili príčiny.
Teraz poďme nainštalovať linstor-satelit и drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite
Vytvorte klaster
Úložné bazény a uzly
Ako backend vezmeme ThinLVM, pretože je najjednoduchší a podporuje snímky.
Sada lvm2, ak ste tak ešte neurobili, vytvorte fond ThinLVM na všetkých našich úložných uzloch:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool
Všetky ďalšie akcie je možné vykonávať priamo na ovládači:
Pridajme naše uzly:
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13
Poďme vytvoriť úložné oblasti:
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é fondy:
linstor storage-pool list
Ak je všetko vykonané správne, mali by sme vidieť niečo ako:
+-------------------------------------------------- -------------------------------------------------- ----+ | StoragePool | Uzol | Vodič | Názov bazéna | Voľná kapacita | Celková kapacita | Podporuje snímky | |-------------------------------------------------- -------------------------------------------------- ---| | údaje | uzol1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | | údaje | uzol2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | | údaje | uzol3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | +-------------------------------------------------- -------------------------------------------------- ----+
zdroje DRBD
Teraz sa pokúsme vytvoriť náš nový zdroj DRBD:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2
Skontrolujeme vytvorené zdroje:
linstor resource list
+-------------------------------------------------- -------------------------------------------------- ---+ | Uzol | Zdroj | StoragePool | VolumeNr | MinorNr | Názov zariadenia | Pridelené | Používam | Štát | |-------------------------------------------------- -------------------------------------------------- --| | uzol1 | myres | údaje | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nepoužité | Aktualizácia | | uzol2 | myres | údaje | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nepoužité | Aktualizácia | +-------------------------------------------------- -------------------------------------------------- ---+
Skvelé! — vidíme, že zdroj bol vytvorený na prvých dvoch uzloch, môžeme sa tiež pokúsiť vytvoriť bezdiskový 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, od ktorého môžete získať viac informácií
Teraz vám poviem, ako ho integrovať s OpenNebula
Nastavenie OpenNebula
Nebudem zachádzať príliš hlboko do procesu nastavenia OpenNebula, pretože... všetky kroky sú podrobne popísané v
linstor_un
Na vyriešenie tohto problému som napísal svoj vlastný ovládač -
Celá inštalácia sa vykonáva na frontendových uzloch OpenNebula a nevyžaduje ďalšie akcie na výpočtových uzloch.
V prvom rade sa musíme uistiť, že máme jq и linstor-klient:
apt-get install jq linstor-client
Tím linstor node list
by mal zobraziť zoznam uzlov. Všetky výpočtové uzly OpenNebula musia byť pridané do klastra Linstor.
Stiahnite si a nainštalujte doplnok:
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 ho musíme pridať do konfigurácie OpenNebula, aby sme to urobili podľa jednoduchých krokov popísaných
Potom reštartujte OpenNebula:
systemctl restart opennebula
A pridajte naše dátové úložiská, systém:
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 obchod s obrázkami:
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 dátových replík, ktoré sa vytvoria pre každý nový obrázok v OpenNebula. - Parameter
CLONE_MODE
presne označuje, ako budú obrázky klonované pri vytváraní nových virtuálnych strojov,snapshot
— vytvorí snímku obrazu a nasadí virtuálny stroj zo snímky,copy
— vytvorí úplnú kópiu obrazu pre každý virtuálny počítač. - В
BRIDGE_LIST
Odporúča sa zadať všetky uzly, ktoré sa použijú na vykonávanie operácií klonovania obrázkov.
Úplný zoznam podporovaných parametrov nájdete v časti
Tým je nastavenie dokončené, teraz si môžete stiahnuť nejaké zariadenie od oficiálneho
Odkaz na projekt:
Zdroj: hab.com