Ne tako davno, momci iz LINBIT-a predstavili su svoje novo SDS rješenje - Linstor. Ovo je potpuno besplatno skladište zasnovano na proverenim tehnologijama: DRBD, LVM, ZFS. Linstor kombinuje jednostavnost i dobro dizajniranu arhitekturu, što vam omogućava da postignete stabilnost i prilično impresivne rezultate.
Danas bih želeo da pričam malo više o tome i da pokažem kako se lako može integrisati sa OpenNebulom koristeći linstor_un - novi drajver koji sam razvio posebno za ovu svrhu.
Linstor u kombinaciji sa OpenNebulom omogućava vam da izgradite brz i pouzdan oblak koji se lako može postaviti na vašu vlastitu infrastrukturu.
Linstor arhitektura
Linstor nije ni sistem datoteka ni blok memorija sam po sebi, Linstor je orkestrator koji obezbeđuje sloj apstrakcije za automatizaciju kreiranja volumena u LVM ili ZFS i njihovo repliciranje pomoću DRBD9.
Razbijanje stereotipa
Ali čekaj, DRBD? - Zašto ga automatizovati i kako uopšte može da funkcioniše?
Prisjetimo se prošlosti kada je DRBD8 bio veoma popularan. Njegova standardna upotreba značila je stvaranje jednog velikog blok uređaja i njegovo rezanje na mnogo malih komada, koristeći isti LVM. Neka vrsta mdadm RAID-1 ali sa mrežnom replikacijom.
Ovaj pristup nije bez nedostataka i stoga, s pojavom DRBD9, principi izgradnje skladišta su se promijenili, sada se kreira poseban DRBD uređaj za svaku virtualnu mašinu.
Pristup nezavisnih blok uređaja omogućava bolje korištenje prostora u klasteru, a također dodaje niz dodatnih funkcija. Na primjer, za svaki takav uređaj možete odrediti broj replika, njihovu lokaciju i pojedinačne postavke. Lako ih je kreirati/brisati, praviti snimke, mijenjati veličinu, omogućiti šifriranje i još mnogo toga. Vrijedi napomenuti da DRBD9 također održava kvorum, čime se izbjegavaju situacije podjele mozga.
Resursi i pozadina
Prilikom kreiranja novog blok uređaja, Linstor postavlja potreban broj replika na različite čvorove u klasteru. Svaku takvu repliku ćemo nazvati DRBD resursom.
Resursi su dvije vrste:
- Izvor podataka - predstavljaju DRBD uređaj koji se nalazi na čvoru u LVM ili ZFS spremištu.
Trenutno postoji podrška za nekoliko backenda i njihov broj stalno raste. Postoji podrška za LVM, ThinLVM i ZFS. Posljednja dva vam omogućavaju da kreirate i koristite snimke. - Resurs bez diska - je DRBD uređaj koji se nalazi na čvoru bez backend-a, ali dozvoljavajući da se tretira kao običan blok uređaj, sve operacije čitanja/pisanja će biti preusmjerene na resurse podataka. Najbliži analog resursima bez diska je iSCSI LUN.
Svaki DRBD resurs može imati do 8 replika i samo jedna od njih može biti aktivna po defaultu − osnovni, sve ostalo će biti sekundarni i njihova upotreba će biti nemoguća sve dok postoji barem jedan primarni, odnosno jednostavno će replicirati podatke između sebe.
Montiranjem DRBD uređaja u sistem, on automatski postaje osnovni, tako da čak i resurs bez diska, u DRBD terminologiji, može biti primarni.
Pa zašto nam treba Linstor?
Povjeravanjem svih resursno intenzivnih zadataka kernelu, Linstor je u suštini obična Java aplikacija koja vam omogućava da lako automatizirate kreiranje DRBD resursa.
U isto vrijeme, svaki resurs koji on kreira bit će nezavisan DRBD klaster koji radi nezavisno, bez obzira na stanje kontrolne ravni i drugih DRBD resursa.
Linstor se sastoji od samo dvije komponente:
- linstor-kontroler - Glavni kontroler, koji pruža API za kreiranje i upravljanje resursima. Također komunicira sa satelitima, provjerava slobodan prostor na njima i šalje poslove za kreiranje i brisanje novih resursa. Pokreće se u jednoj instanci i koristi bazu podataka koja može biti interna (H2) ili eksterna (PostgreSQL, MySQL, MariaDB)
- linstor-satelit - Instalira se na svim čvorovima za skladištenje i daje kontroleru informacije o slobodnom prostoru, a također obavlja zadatke primljene od kontrolera za kreiranje i brisanje novih volumena i DRBD uređaja iznad njih.
Linstor radi sa sljedećim ključnim konceptima:
- čvor — fizički server na kojem će se kreirati i koristiti DRBD resursi.
- skladišni bazen - LVM ili ZFS spremište kreirano na čvoru u koji će biti smješteni DRBD resursi. Moguće je i spremište bez diska - ovo je spremište u koje će biti smješteni samo resursi bez diska.
- definicija resursa - Definicija resursa, u stvari to je prototip koji opisuje ime i sva njegova svojstva.
- definicija volumena — Definicija volumena. Svaki resurs se može sastojati od nekoliko volumena, svaki volumen mora imati veličinu.
- resurs - Kreirana instanca blok uređaja, svaki resurs mora biti smješten na određenom čvoru iu nekom spremištu.
Instalacija Linstora
Preporučujem korištenje Ubuntua kao sistema, 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 Proxmox spremišta:
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
Ovde je sve jednostavno:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller
Čvorovi za skladištenje
Linux kernel trenutno se isporučuje sa modulom kernela u stablu DRBD8,nazalost nam ne odgovara i moramo ga instalirati DRBD9:
apt-get install drbd-dkms
Kao što pokazuje praksa, većina poteškoća nastaje upravo s činjenicom da se u sistem učitava modul DRBD8, a ne DRBD9. Srećom, ovo je lako provjeriti pokretanjem:
modprobe drbd
cat /proc/drbd
Ako vidite verzija: 9 - sve je u redu ako verzija: 8 - to znači da je nešto pošlo po zlu i da morate poduzeti dodatne korake kako biste saznali razloge.
Sada instalirajmo linstor-satelit и drbd-utils:
apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite
Kreirajte klaster
Skladišni bazeni i čvorovi
Kao backend ćemo uzeti ThinLVM, jer najjednostavniji je i podržava snimke.
Ustanovite lvm2, ako to već niste učinili, i hajde da kreiramo ThinLVM bazen na svim našim čvorovima za pohranu:
sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool
Sve dalje radnje mogu se izvršiti direktno na kontroleru:
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 skladišne bazene:
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 kreirane bazene:
linstor storage-pool list
Ako je sve urađeno kako treba, trebali bismo vidjeti nešto poput:
+------------------------------------------------ -------------------------------------------------- ----+ | StoragePool | čvor | vozač | naziv bazena | freecapacity | ukupni kapacitet | Podržava Snapshots | |------------------------------------------------ -------------------------------------------------- ----| | podaci | čvor1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | | podaci | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | | podaci | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | istina | +------------------------------------------------ -------------------------------------------------- ----+
DRBD resursi
Pokušajmo sada kreirati naš novi DRBD resurs:
linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2
Provjerimo kreirane resurse:
linstor resource list
+------------------------------------------------ -------------------------------------------------- ---+ | čvor | resurs | StoragePool | VolumeNr | MinorNr | DeviceName | Dodijeljeno | u upotrebi | stanje | |------------------------------------------------ -------------------------------------------------- ---| | čvor1 | myres | podaci | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neiskorišteno | UpToDate | | node2 | myres | podaci | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neiskorišteno | UpToDate | +------------------------------------------------ -------------------------------------------------- ---+
Odlično! - vidimo da je resurs kreiran na prva dva čvora, također možemo pokušati kreirati 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 Linstor radi, možete dobiti više informacija od
Sada ću govoriti o tome kako da ga integrišem sa OpenNebulom
Postavljanje OpenNebula
Neću ulaziti previše u proces postavljanja OpenNebula, jer Svi koraci su detaljno opisani u
linstor_un
Da riješim ovaj problem, napisao sam svoj drajver −
Celokupna instalacija se izvodi na frontend OpenNebula čvorovima i ne zahteva dodatne radnje na računarskim čvorovima.
Prije svega, moramo biti sigurni da imamo jq и linstor-client:
apt-get install jq linstor-client
tim linstor node list
treba prikazati listu čvorova. Svi OpenNebula računarski čvorovi moraju biti dodati u Linstor klaster.
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 u OpenNebula konfiguraciju, za to slijedimo jednostavne opisane korake
Zatim ponovo pokrenite OpenNebula:
systemctl restart opennebula
I dodajte naše skladišta podataka, 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
I prodavnica 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 kreirane za svaku novu sliku u OpenNebula. - Parametar
CLONE_MODE
označava tačno kako će slike biti klonirane prilikom kreiranja novih virtuelnih mašina,snapshot
- će kreirati snimak slike i implementirati virtuelnu mašinu iz snimka,copy
- napraviće punu kopiju slike za svaku virtuelnu mašinu. - В
BRIDGE_LIST
preporučljivo je navesti sve čvorove koji će se koristiti za izvođenje operacija kloniranja slike.
Za kompletnu listu podržanih opcija, pogledajte
Ovim je podešavanje završeno, sada možete preuzeti neki uređaj sa službenog
Link projekta:
izvor: www.habr.com