Shranjevanje LINSTOR in njegova integracija z OpenNebula

Shranjevanje LINSTOR in njegova integracija z OpenNebula

Pred kratkim so fantje iz LINBIT-a predstavili svojo novo SDS rešitev - Linstor. To je popolnoma brezplačna shramba, ki temelji na preverjenih tehnologijah: DRBD, LVM, ZFS. Linstor združuje preprostost in dobro zasnovano arhitekturo, ki vam omogoča doseganje stabilnosti in precej impresivnih rezultatov.

Danes bi rad o njem spregovoril nekoliko podrobneje in pokazal, kako preprosto ga je mogoče integrirati z OpenNebulo z uporabo linstor_un - novega gonilnika, ki sem ga razvil posebej za ta namen.

Linstor v kombinaciji z OpenNebula vam omogoča, da zgradite hiter in zanesljiv oblak, ki ga je mogoče preprosto namestiti na lastno infrastrukturo.

Linstorjeva arhitektura

Linstor sam po sebi ni niti datotečni sistem niti blokovna shramba, Linstor je orkestrator, ki zagotavlja abstrakcijsko plast, ki vam omogoča avtomatizacijo ustvarjanja nosilcev v LVM ali ZFS in njihovo repliciranje z uporabo DRBD9.

Razbijanje stereotipov

Ampak počakaj, DRBD? — Zakaj bi ga avtomatizirali in kako sploh lahko deluje?

Spomnimo se preteklosti, ko je bil DRBD8 zelo priljubljen. Njegova standardna uporaba je vključevala ustvarjanje ene velike blokovne naprave in njeno rezanje na veliko majhnih kosov z uporabo istega LVM. Nekakšen mdadm RAID-1 vendar z replikacijo preko omrežja.

Ta pristop ni brez pomanjkljivosti, zato so se s prihodom DRBD9 načela načrtovanja pomnilnika spremenila; zdaj je za vsak virtualni stroj ustvarjena ločena naprava DRBD.

Pristop z neodvisnimi blokovnimi napravami omogoča boljši izkoristek prostora v gruči, dodaja pa tudi vrsto dodatnih funkcij. Na primer, za vsako takšno napravo lahko določite število replik, njihovo lokacijo in posamezne nastavitve. Enostavno jih je ustvariti/izbrisati, narediti posnetke, spremeniti velikost, omogočiti šifriranje in še veliko več. Omeniti velja, da DRBD9 podpira tudi kvorum, kar vam omogoča, da se izognete situacijam z razdeljenimi možgani.

Viri in zaledja

Pri ustvarjanju nove blokovne naprave Linstor postavi zahtevano število replik na različna vozlišča v gruči. Vsako takšno repliko bomo imenovali vir DRBD.

Obstajata dve vrsti virov:

  • Podatkovni vir — so naprava DRBD, ki se nahaja na vozlišču v področju LVM ali ZFS.
    Trenutno obstaja podpora za več ozadij in njihovo število nenehno raste. Obstaja podpora za LVM, ThinLVM in ZFS. Zadnja dva omogočata ustvarjanje in uporabo posnetkov.
  • Vir brez diska — je naprava DRBD, nameščena na vozlišču brez zaledja, vendar omogoča, da jo obravnavamo kot običajno blokovno napravo; vse operacije branja/pisanja bodo preusmerjene v podatkovne vire. Najbližji analog virom brez diska je iSCSI LUN.

Vsak vir DRBD ima lahko do 8 replik in samo ena od njih je lahko privzeto aktivna - Primarni, vsi drugi bodo Sekundarno in njihova uporaba bo nemogoča, dokler bo obstajal vsaj en Primary, to pomeni, da bodo preprosto podvajali podatke med seboj.

Z namestitvijo naprave DRBD v sistem ta samodejno postane Primarni, tako da je celo vir brez diska, v terminologiji DRBD, lahko primarni.

Zakaj torej potrebujete Linstor?

Z zaupanjem vseh nalog, ki zahtevajo veliko virov, jedru je Linstor v bistvu običajna aplikacija Java, ki vam omogoča preprosto avtomatizacijo ustvarjanja virov DRBD.
Poleg tega bo vsak vir, ki ga ustvari, neodvisna gruča DRBD, ki deluje neodvisno, ne glede na stanje nadzorne ravnine in drugih virov DRBD.

Linstor je sestavljen iz samo dveh komponent:

  • Linstor-krmilnik - Glavni krmilnik, ki ponuja API za ustvarjanje in upravljanje virov. Prav tako komunicira s sateliti, preverja prosti prostor na njih in pošilja naloge za ustvarjanje in brisanje novih virov. Zažene se v enem samem primerku in uporablja bazo podatkov, ki je lahko notranja (H2) ali zunanja (PostgreSQL, MySQL, MariaDB)
  • Linstor-satelit — Nameščen na vseh vozliščih za shranjevanje in zagotavlja krmilniku informacije o prostem prostoru ter izvaja tudi naloge, ki jih prejme od krmilnika za ustvarjanje in brisanje novih nosilcev in naprav DRBD na njih.

Linstor deluje z naslednjimi ključnimi koncepti:

  • Node — fizični strežnik, na katerem bodo ustvarjeni in uporabljeni viri DRBD.
  • Bazen za shranjevanje — Področje LVM ali ZFS, ustvarjeno na vozlišču, v katerem bodo sredstva DRBD. Možen je tudi bazen brez diska - to je bazen, v katerem bodo le viri brez diska.
  • Opredelitev vira — Definicija vira je v bistvu prototip, ki opisuje ime in vse njegove lastnosti.
  • Opredelitev glasnosti — Opredelitev volumna. Vsak vir je lahko sestavljen iz več zvezkov, vsak nosilec mora imeti velikost.
  • Vir — Ustvarjen primerek blokovne naprave, vsak vir mora biti postavljen na določeno vozlišče in v neko pomnilniško področje.

Linstor namestitev

Priporočam uporabo Ubuntuja kot sistema, ker... obstaja zanjo pripravljen PPA:

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

Ali Debian, kjer je Linstor mogoče namestiti iz uradnega repozitorija za 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

krmilnik

Vse je preprosto tukaj:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

Vozlišča za shranjevanje

Jedro Linuxa je trenutno dobavljeno z modulom jedra v drevesu DRBD8, žal nam ne ustreza in moramo namestiti DRBD9:

apt-get install drbd-dkms

Kot kaže praksa, večina težav nastane prav zato, ker je v sistem naložen modul DRBD8 in ne DRBD9. Na srečo je to enostavno preveriti tako, da zaženete:

modprobe drbd
cat /proc/drbd

Če vidite različica: 9 - pomeni, da je vse v redu, če različica: 8 - pomeni, da je šlo nekaj narobe in morate narediti dodatne korake, da ugotovite razloge.

Zdaj pa namestimo linstor-satelit и drbd-utils:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

Ustvarite gručo

Shranjevalna področja in vozlišča

Kot zaledje bomo vzeli ThinLVM, Ker je najenostavnejši in podpira posnetke.
Set lvm2, če tega še niste storili, ustvarimo področje ThinLVM na vseh naših vozliščih za shranjevanje:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

Vsa nadaljnja dejanja lahko izvedete neposredno na krmilniku:

Dodajmo naša vozlišča:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

Ustvarimo shranjevalna področja:

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

Zdaj pa preverimo ustvarjene bazene:

linstor storage-pool list

Če je vse narejeno pravilno, bi morali videti nekaj takega:

+------------------------------------------------ -------------------------------------------------- ----+ | StoragePool | Vozlišče | Voznik | Ime bazena | FreeCapacity | Skupna zmogljivost | Podpira posnetke | |------------------------------------------------ - -------------------------------------------------- - ---| | podatki | vozlišče1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | res | | podatki | vozlišče2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | res | | podatki | vozlišče3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | res | +------------------------------------------------ -------------------------------------------------- ----+

viri DRBD

Zdaj pa poskusimo ustvariti naš novi vir DRBD:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

Preverimo ustvarjene vire:

linstor resource list 

+------------------------------------------------ -------------------------------------------------- ---+ | Vozlišče | Vir | StoragePool | zvezek št. | MinorNr | Ime naprave | Dodeljeno | V uporabi | Država | |------------------------------------------------ - -------------------------------------------------- - --| | vozlišče1 | myres | podatki | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neuporabljen | UpToDate | | vozlišče2 | myres | podatki | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neuporabljen | UpToDate | +------------------------------------------------ -------------------------------------------------- ---+

Super! — vidimo, da je bil vir ustvarjen na prvih dveh vozliščih, lahko poskusimo ustvariti tudi vir brez diska na tretjem:

linstor resource create --diskless node3 myres

Na vozliščih boste to napravo vedno našli kot /dev/drbd1084 ali /dev/drbd/by-res/myres/0

Tako deluje Linstor, več informacij lahko dobite pri uradna dokumentacija.

Zdaj vam bom povedal, kako ga integrirati z OpenNebulo

Nastavitev OpenNebula

Ne bom se preveč poglabljal v postopek namestitve OpenNebula, ker ... vsi koraki so podrobno opisani v uradna dokumentacija, na katerega vam priporočam, da se obrnete, vam bom povedal le o integraciji OpenNebula z Linstorjem.

linstor_un

Da bi rešil to težavo, sem napisal svoj gonilnik - linstor_un, je trenutno na voljo kot vtičnik in ga je treba namestiti posebej.

Celotna namestitev se izvede na sprednjih vozliščih OpenNebula in ne zahteva dodatnih dejanj na računalniških vozliščih.

Najprej se moramo prepričati, da imamo jq и linstor-odjemalec:

apt-get install jq linstor-client

Ekipa linstor node list mora prikazati seznam vozlišč. Vsa računalniška vozlišča OpenNebula morajo biti dodana v gručo Linstor.

Prenesite in namestite vtičnik:

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

Zdaj ga moramo dodati v konfiguracijo OpenNebula, za to sledimo preprostim opisanim korakom tukaj.

Nato znova zaženite OpenNebula:

systemctl restart opennebula

In dodajte naše podatkovne shrambe, 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

In trgovina s slikami:

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 prikaže število replik podatkov, ki bodo ustvarjene za vsako novo sliko v OpenNebula.
  • Parameter CLONE_MODE natančno nakazuje, kako bodo slike klonirane pri ustvarjanju novih virtualnih strojev, snapshot — bo ustvaril posnetek slike in iz posnetka uvedel virtualni stroj, copy — naredi popolno kopijo slike za vsak virtualni stroj.
  • В BRIDGE_LIST Priporočljivo je določiti vsa vozlišča, ki bodo uporabljena za izvajanje operacij kloniranja slike.

Za celoten seznam podprtih parametrov glejte README projekt.

S tem je nastavitev končana, zdaj lahko prenesete nekatere naprave iz uradnika OpenNebula Marketplace in iz njega ustvarite virtualne stroje.

Povezava projekta:
https://github.com/OpenNebula/addon-linstor_un

Vir: www.habr.com

Dodaj komentar