
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 :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateVagy 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 updateController
Itt minden egyszerű:
apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controllerTá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-dkmsGyakorlatilag 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/drbdHa 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-satelliteKló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/thinpoolMinden 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.13Hozzuk 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/thinpoolMost ellenőrizzük a létrehozott poolokat:
linstor storage-pool listHa 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 2Ellenő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 myresA 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 .
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 , 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 — , 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-clientA 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-masterMost már hozzá kell adnunk a konfigurációhoz az OpenNebulában, ehhez a következő egyszerű lépéseket hajtjuk végre .
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_PLACEmegmutatja a data-replikák számát, amely minden új képhez létrejön az OpenNebulában. - A parameter
CLONE_MODEmegadja, 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_LISTajá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: projekt.
Ezzel a beállítás befejeződött, most már betölthetünk egy appliance-t az hivatalos és létrehozhatunk virtuális gépeket belőle.
A projekt linkje:
Forrás: habr.com
