A LINSTOR tároló és integrációja az OpenNebulával

A LINSTOR tároló és integrációja az OpenNebulával

Nem olyan régen a LINBIT srácai bemutatták új SDS-megoldásukat – a Linstort. Ez egy teljesen ingyenes tárolórendszer, amelynek alapját megbízható technológiák képezik: DRBD, LVM, ZFS. A Linstor egyszerűséget és jól kidolgozott architektúrát kínál, ami lehetővé teszi a stabilitás és az impozáns eredmények elérését.

Ma szeretném egy kicsit részletesebben bemutatni, és megmutatni, milyen egyszerű integrálni az OpenNebulával az linstor_un használatával – ez egy új meghajtó, amelyet kifejezetten erre a célra fejlesztettem.

A Linstor és az OpenNebula kombinációja gyors és megbízható felhő létrehozását teszi lehetővé, amely probléma nélkül telepíthető a saját infrastruktúrában.

A Linstor architektúrája

A Linstor nem fájlrendszer, sem önálló blokk tároló, hanem egy orchestrátor, amely egy absztrakciós réteget biztosít, lehetővé téve a kötetek automatikus létrehozását LVM vagy ZFS alatt, és azok replikálását DRBD9 által.

Stereotípiák lebontása

De várj, DRBD? – Miért kellene automatizálni, és egyáltalán hogyan működhet ez?

Emlékezzünk a múltra, amikor a DRBD8 széles körben elterjedt volt. A standard használatában egy nagy blokk eszköz létrehozása és annak sok apró darabra szabása történt, ugyanazzal az LVM használatával. Olyasmi, mint az mdadm RAID-1, de hálózati replikációval.

Ez a megközelítés nem mentes a hátrányoktól, ezért a DRBD9 megérkezésével a tároló felépítési elvei megváltoztak, mostantól minden virtuális géphez külön DRBD-eszközt hozunk létre.

A független blokk eszközökkel végzett megközelítés jobb erőforrás-kiaknázást tesz lehetővé a klaszterben, és számos további lehetőséget is nyújt. Például minden ilyen eszköznél meghatározhatjuk a replikák számát, elhelyezkedésüket és egyéni beállításaikat. Ezeket könnyen létrehozhatjuk/eltávolíthatjuk, pillanatfelvételeket készíthetünk, módosíthatjuk a méretet, engedélyezhetjük a titkosítást és sok más lehetőséget is kínál. Érdemes megjegyezni, hogy a DRBD9 támogató quorum-mal is rendelkezik, amely elkerüli a split-brain helyzeteket.

Erőforrások és háttérszolgáltatók

Új blokk eszköz létrehozásakor a Linstor a klaszter különböző NODE-jain elhelyezi a szükséges replikák számát. Minden ilyen replikát DRBD-erőforrásnak nevezünk.

Az erőforrások két típusúak:

  • Adat-erőforrás – a LVM vagy ZFS tárolóban elhelyezett DRBD-eszközt képvisel.
    Jelenleg több backend támogatott, és a számuk folyamatosan növekszik. Támogatott az LVM, ThinLVM és ZFS. Az utóbbi kettő lehetővé teszi pillanatképek létrehozását és használatát.
  • Diskless-forrás — egy DRBD eszköz, amely egy backend nélküli noden van elhelyezve, de lehetővé teszi a szokásos blokkeszközként való kezelését, minden olvasási/írási művelet átirányításra kerül a data-forrásokra. A legközelebbi analóg a diskless-forrásokhoz az iSCSI LUN.

Minden DRBD-forrásnak legfeljebb 8 replikája lehet, és csak az egyik lehet alapértelmezés szerint aktív — Primary, az összes többi pedig Secondary lesz, és a használatuk nem lehetséges, amíg van legalább egy Primary, azaz egyszerűen csak replikálják az adatokat egymás között.

A DRBD eszköz rendszerbe való csatlakoztatásakor automatikusan Primary, így még egy Diskless-forrás is, a DRBD terminológiájában, lehet Primary.

Miért van szükség a Linstorra?

Mivel az erőforrást igénylő feladatokat a kernelre bízza, a Linstor lényegében egy szokásos Java-alkalmazás, amely lehetővé teszi a DRBD-források létrehozásának automatizálását.
Minden általuk létrehozott forrás egy független DRBD klaszter lesz, amely önállóan működik, függetlenül a control-plane állapotától és a többi DRBD-forrástól.

A Linstor mindössze két komponensből áll:

  • Linstor-controller — Az alap kontroller, amely API-t biztosít a források létrehozásához és kezeléséhez. Kommunikál a satellite-ekkel, ellenőrzve a szabad helyet rajtuk, és feladatokat küld új források létrehozására és törlésére. Egy példányban fut, és olyan adatbázist használ, amely lehet belső (H2) vagy külső (PostgreSQL, MySQL, MariaDB).
  • Linstor-satellite — Minden storage node-ra telepítve van, és információt nyújt a kontrollernek a szabad helyről, valamint a kontroller által kapott feladatokat hajtja végre új kötetek és DRBD-eszközök létrehozására és törlésére.

A Linstor a következő kulcsfogalmakkal operál:

  • Node — a fizikai szerver, amelyen DRBD-forrásokat hoznak létre és használnak.
  • Storage Pool — LVM vagy ZFS medence, amelyet egy noden hoznak létre, ahol DRBD-forrásokat tárolnak. Diskless medence is lehetséges — ez egy medence, ahol csak diskless-források tárolódnak.
  • Resource Definition — A forrás lényegében egy prototípus, amely leírja a nevét és minden tulajdonságát.
  • Kötet meghatározása — A kötet meghatározása. Minden forrás több kötetből állhat, minden kötetnek rendelkeznie kell egy mérettel.
  • Forrás — A blokkalapú eszköz létrehozott példánya, minden forrásnak meghatározott csomóponton és valamilyen tárolási pool-ban kell elhelyezkednie.

Linstor telepítése

Ajánlott rendszer az Ubuntu használata, mivel ehhez létezik kész PPA:

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

Vagy Debian, ahol a Linstor a Proxmox hivatalos tárolójából telepíthető:

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

Controller

Itt minden egyszerű:

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

Tároló csomópontok

Jelenleg a Linux kernelben in-tree kernel modul található DRBD8, sajnos ez nem megfelelő számunkra, és szükségünk van DRBD9:

apt-get install drbd-dkms

Gyakorlatilag a legtöbb nehézség abból fakad, hogy a DRBD8 modul van betöltve a rendszerbe, nem pedig a DRBD9. Szerencsére ezt könnyen ellenőrizhetjük:

modprobe drbd
cat /proc/drbd

Ha látja verzió: 9 — akkor minden rendben van, ha verzió: 8 — akkor valami nem stimmel, és további lépéseket kell tennie az okok felderítése érdekében.

Most telepítsük linstor-satellite és drbd-utils:

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

Klónozási folyamat létrehozása

Tároló poolok és csomópontok

Backendként a ThinLVM, mivel ez a legegyszerűbb és támogatja a pillanatképeket.
Telepítse lvm2, ha ezt még nem tette meg, és hozzunk létre ThinLVM pool-t minden tároló csomópontunkon:

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

Minden további lépés közvetlenül a vezérlőn hajtható végre:

Adjunk hozzá a csomópontjainkat:

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

Hozzuk létre a tároló poolokat:

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

Most ellenőrizzük a létrehozott poolokat:

linstor storage-pool list

Ha minden rendben van, valami ilyesmit kell látnunk:

+-------------------------------------------------------------------------------------------------------+
| StoragePool | Node  | Driver   | PoolName          | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------------|
| data        | node1 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node2 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node3 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
+-------------------------------------------------------------------------------------------------------+

DRBD erőforrások

Most próbáljuk meg létrehozni az új DRBD erőforrásunkat:

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

Ellenőrizzük a létrehozott erőforrásokat:

linstor resource list 

+------------------------------------------------------------------------------------------------------+
| Node  | Resource | StoragePool | VolumeNr | MinorNr | DeviceName    | Allocated  | InUse  |    State |
|------------------------------------------------------------------------------------------------------|
| node1 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
| node2 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
+------------------------------------------------------------------------------------------------------+

Remek! — látjuk, hogy az erőforrás az első két node-on létrejött, megpróbálhatunk egy diskless erőforrást létrehozni a harmadikon:

linstor resource create --diskless node3 myres

A node-okon mindig ezt az eszközt fogja találni mint /dev/drbd1084 vagy /dev/drbd/by-res/myres/0

Így működik a Linstor, többet megtudhat a hivatalos dokumentációban.

Most elmondom, hogyan integráljuk az OpenNebulával

OpenNebula konfigurálása

Nem fogok mélyen belemenni az OpenNebula konfigurálásának folyamatába, mivel minden lépést részletesen ismertetnek a hivatalos dokumentációban, amelyet ajánlok figyelmébe, csak az OpenNebula és a Linstor integrációjáról fogok beszélni.

linstor_un

E feladat megoldásához írtam egy saját drivert — linstor_un, jelenleg plugin formájában elérhető és külön kell telepíteni.

A telepítés összesen az OpenNebula frontend node-okon történik, és nem igényel további lépéseket a compute node-okon.

Első lépésként meg kell bizonyosodnunk arról, hogy van jq és linstor-client:

apt-get install jq linstor-client

A parancs linstor node list a node-ok listáját kell megjelenítenie. Minden OpenNebula compute node-nak hozzá kell adva lennie a Linstor klaszterhez.

Töltsük le és telepítsük a plugint:

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

Most már hozzá kell adnunk a konfigurációhoz az OpenNebulában, ehhez a következő egyszerű lépéseket hajtjuk végre itt.

Ezt követően újraindítjuk az OpenNebulát:

systemctl restart opennebula

És hozzáadjuk a datastorejainkat, a rendszert:

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

És a képfájl tárolóját:

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

  • A parameter AUTO_PLACE megmutatja a data-replikák számát, amely minden új képhez létrejön az OpenNebulában.
  • A parameter CLONE_MODE megadja, hogy pontosan hogyan fognak klónozni a képek új virtuális gépek létrehozásakor, snapshot — azaz képet készít a pillanatképről, és abból indítja el a virtuális gépet, másolás — teljes másolatot készít a képről minden egyes virtuális géphez.
  • A BRIDGE_LIST ajánlott megadni az összes csomópontot, amelyet a képek klónozási műveleteihez használnak.

A támogatott paraméterek teljes listáját a következő helyen találja: README projekt.

Ezzel a beállítás befejeződött, most már betölthetünk egy appliance-t az hivatalos OpenNebula Marketplace és létrehozhatunk virtuális gépeket belőle.

A projekt linkje:
https://github.com/OpenNebula/addon-linstor_un

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster