Nedavno su momci iz LINBIT-a predstavili svoje novo SDS rješenje - Linstor. Ovo je potpuno besplatna pohrana temeljena na provjerenim tehnologijama: DRBD, LVM, ZFS. Linstor kombinira jednostavnost i dobro osmišljenu arhitekturu, što vam omogućuje postizanje stabilnosti i prilično impresivnih rezultata.
Danas bih želio govoriti o njemu malo detaljnije i pokazati kako se lako može integrirati s OpenNebulom pomoću linstor_un - novog upravljačkog programa koji sam razvio posebno za ovu svrhu.
Linstor u kombinaciji s OpenNebulom omogućuje vam izgradnju brzog i pouzdanog oblaka koji se lako može implementirati na vlastitu infrastrukturu.
Linstor arhitektura
Linstor nije ni datotečni sustav ni blok pohrana sam po sebi, Linstor je orkestrator koji pruža sloj apstrakcije koji vam omogućuje automatiziranje stvaranja volumena u LVM-u ili ZFS-u i njihovo repliciranje pomoću DRBD9.
Razbijanje stereotipa
Ali čekaj, DRBD? — Zašto ga automatizirati i kako uopće može funkcionirati?
Prisjetimo se prošlosti, kada je DRBD8 bio vrlo popularan. Njegova standardna upotreba uključivala je stvaranje jednog velikog blok uređaja i njegovo rezanje na mnogo malih dijelova, koristeći isti LVM. Neka vrsta mdadm RAID-1 ali s replikacijom preko mreže.
Ovaj pristup nije bez nedostataka, pa su se s dolaskom DRBD9 promijenila načela dizajna pohrane; sada se za svako virtualno računalo stvara zasebni DRBD uređaj.
Pristup s neovisnim blok uređajima omogućuje bolju iskorištenost prostora u klasteru, a također dodaje niz dodatnih mogućnosti. Na primjer, za svaki takav uređaj možete odrediti broj replika, njihov položaj i pojedinačne postavke. Lako ih je izraditi/izbrisati, napraviti snimke, promijeniti veličinu, omogućiti enkripciju i još mnogo toga. Vrijedno je napomenuti da DRBD9 također podržava kvorum, što vam omogućuje da izbjegnete situacije podijeljenog mozga.
Resursi i pozadina
Prilikom izrade novog blok uređaja Linstor postavlja potreban broj replika na različite čvorove u klasteru. Svaku takvu repliku nazvat ćemo DRBD resurs.
Postoje dvije vrste resursa:
- Izvor podataka — su DRBD uređaj smješten na čvoru u LVM ili ZFS skupu.
Trenutno postoji podrška za nekoliko pozadina i njihov broj stalno raste. Postoji podrška za LVM, ThinLVM i ZFS. Posljednja dva vam omogućuju stvaranje i korištenje snimaka. - Resurs bez diska — je DRBD uređaj postavljen na čvor bez pozadine, ali dopušta da se s njime postupa kao s uobičajenim blok uređajem; sve operacije čitanja/pisanja bit će preusmjerene na podatkovne resurse. Najbliži analog resursima bez diska je iSCSI LUN.
Svaki DRBD resurs može imati do 8 replika, a samo jedna od njih može biti aktivna prema zadanim postavkama - osnovni, svi ostali će biti Sekundarni i njihova će uporaba biti nemoguća sve dok postoji barem jedan Primary, odnosno oni će jednostavno međusobno replicirati podatke.
Instaliranjem DRBD uređaja u sustav, on automatski postaje osnovni, stoga čak i resurs bez diska, u DRBD terminologiji, može biti primarni.
Pa zašto vam treba Linstor?
Povjeravajući sve zadatke koji zahtijevaju velike resurse jezgri, Linstor je u biti obična Java aplikacija koja vam omogućuje jednostavnu automatizaciju stvaranja DRBD resursa.
Štoviše, svaki resurs koji on stvori bit će neovisni DRBD klaster koji radi neovisno, bez obzira na stanje kontrolne ravnine i drugih DRBD resursa.
Linstor se sastoji od samo dvije komponente:
- Linstor-kontrolor - Glavni kontroler, koji pruža API za kreiranje i upravljanje resursima. Također komunicira sa satelitima, provjerava slobodan prostor na njima i šalje zadatke za stvaranje i brisanje novih resursa. Pokreće se u jednoj instanci i koristi bazu podataka, koja može biti unutarnja (H2) ili vanjska (PostgreSQL, MySQL, MariaDB)
- Linstor-satelit — Instalira se na svim čvorovima za pohranu i pruža kontroleru informacije o slobodnom prostoru, a također obavlja zadatke primljene od kontrolera za stvaranje i brisanje novih volumena i DRBD uređaja povrh njih.
Linstor radi sa sljedećim ključnim konceptima:
- Čvor — fizički poslužitelj na kojem će se kreirati i koristiti DRBD resursi.
- Bazen za pohranu — LVM ili ZFS skup stvoren na čvoru u kojem će se nalaziti DRBD resursi. Moguć je i bazen bez diska - ovo je bazen u kojem će se nalaziti samo resursi bez diska.
- Definicija izvora — Definicija resursa je u biti prototip koji opisuje naziv i sva njegova svojstva.
- Definicija volumena — Definicija volumena. Svaki resurs može se sastojati od više volumena, svaki volumen mora imati veličinu.
- Resurs — Stvorena instanca blok uređaja, svaki resurs mora biti postavljen na određeni čvor i u neko skladište za pohranu.
Linstor instalacija
Preporučujem korištenje Ubuntua kao sustava, jer... postoji za nju
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update
Ili Debian, gdje se Linstor može instalirati iz službenog 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
kontrolor
Ovdje je sve jednostavno:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller
Čvorovi za pohranu
Linux kernel trenutno se isporučuje s in-tree modulom kernela DRBD8, nažalost nama ne odgovara i moramo instalirati DRBD9:
apt-get install drbd-dkms
Kao što praksa pokazuje, većina poteškoća nastaje upravo zato što se u sustav učitava modul DRBD8, a ne DRBD9. Srećom, to je lako provjeriti pokretanjem:
modprobe drbd
cat /proc/drbd
Ako vidiš Verzija: 9 - znači da je sve u redu ako Verzija: 8 - to znači da je nešto pošlo po zlu i morate poduzeti dodatne korake kako biste saznali razloge.
Sada idemo instalirati linstor-satelit и drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite
Napravite klaster
Skupovi i čvorovi za pohranu
Kao backend ćemo uzeti ThinLVM, jer najjednostavniji je i podržava snimke.
Postaviti lvm2, ako to već niste učinili, stvorimo ThinLVM skup na svim našim čvorovima za pohranu:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool
Sve daljnje radnje mogu se izvršiti izravno na upravljaču:
Dodajmo naše čvorove:
linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13
Kreirajmo skupove za pohranu:
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
Sada provjerimo stvorene bazene:
linstor storage-pool list
Ako je sve učinjeno kako treba, trebali bismo vidjeti nešto poput:
+------------------------------------------------ -------------------------------------------------- ----+ | Spremište | Čvor | Vozač | Ime bazena | FreeCapacity | Ukupni kapacitet | Podržava snimke | |------------------------------------------------ - ------------------------------------------------- - ---| | podaci | čvor1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | | podaci | čvor2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | | podaci | čvor3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | +------------------------------------------------ -------------------------------------------------- ----+
DRBD resursi
Pokušajmo sada stvoriti naš novi DRBD resurs:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2
Provjerimo stvorene resurse:
linstor resource list
+------------------------------------------------ -------------------------------------------------- ---+ | Čvor | Izvor | Spremište | SvezakNr | ManjiNr | Naziv uređaja | Dodijeljeno | U upotrebi | Država | |------------------------------------------------ - ------------------------------------------------- - --| | čvor1 | myres | podaci | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neiskorišten | Ažurirano | | čvor2 | myres | podaci | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neiskorišten | Ažurirano | +------------------------------------------------ -------------------------------------------------- ---+
Sjajno! — vidimo da je resurs stvoren na prva dva čvora, također možemo pokušati stvoriti resurs bez diska na trećem:
linstor resource create --diskless node3 myres
Na čvorovima ćete uvijek pronaći ovaj uređaj kao /dev/drbd1084
ili /dev/drbd/by-res/myres/0
Ovako funkcionira Linstor, više informacija možete dobiti kod
Sada ću vam reći kako ga integrirati s OpenNebulom
Postavljanje OpenNebule
Neću ulaziti preduboko u proces postavljanja OpenNebule, jer... svi su koraci detaljno opisani u
linstor_un
Kako bih riješio ovaj problem, napisao sam vlastiti upravljački program -
Cjelokupna instalacija provodi se na prednjim OpenNebula čvorovima i ne zahtijeva dodatne radnje na računalnim čvorovima.
Prije svega, moramo biti sigurni da imamo jq и linstor-klijent:
apt-get install jq linstor-client
Momčad linstor node list
treba prikazati popis čvorova. Svi računalni čvorovi OpenNebula moraju se dodati Linstor klasteru.
Preuzmite i instalirajte dodatak:
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
Sada ga moramo dodati konfiguraciji OpenNebula, da bismo to učinili slijedimo opisane jednostavne korake
Zatim ponovno pokrenite OpenNebula:
systemctl restart opennebula
I dodajte naša spremišta podataka, sustav:
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
I pohrana slika:
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
- Parametar
AUTO_PLACE
prikazuje broj replika podataka koje će biti stvorene za svaku novu sliku u OpenNebuli. - Parametar
CLONE_MODE
označava točno kako će slike biti klonirane prilikom stvaranja novih virtualnih strojeva,snapshot
— stvorit će snimku slike i implementirati virtualni stroj iz snimke,copy
— napravit će potpunu kopiju slike za svaki virtualni stroj. - В
BRIDGE_LIST
Preporuča se navesti sve čvorove koji će se koristiti za izvođenje operacija kloniranja slike.
Za potpuni popis podržanih parametara pogledajte
Ovo dovršava postavljanje, sada možete preuzeti neki uređaj sa službene strane
Link projekta:
Izvor: www.habr.com