LINSTOR skladište i njegova integracija sa OpenNebula

LINSTOR skladište i njegova integracija sa OpenNebula

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 gotovi PPA:

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 službena dokumentacija.

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 službena dokumentacija, na koji preporučujem da se osvrnete, govoriću samo o integraciji OpenNebula sa Linstorom.

linstor_un

Da riješim ovaj problem, napisao sam svoj drajver − linstor_un, trenutno je dostupan kao dodatak i mora se zasebno instalirati.

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 ovdje.

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 README projekat.

Ovim je podešavanje završeno, sada možete preuzeti neki uređaj sa službenog OpenNebula Marketplace i kreirati virtuelne mašine od toga.

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

izvor: www.habr.com

Dodajte komentar