Úložiště LINSTOR a jeho integrace s OpenNebula

Úložiště LINSTOR a jeho integrace s OpenNebula

Není to tak dávno, co kluci z LINBIT představili své nové SDS řešení - Linstor. Jedná se o zcela bezplatné úložiště založené na osvědčených technologiích: DRBD, LVM, ZFS. Linstor kombinuje jednoduchost a dobře navrženou architekturu, která vám umožní dosáhnout stability a docela působivých výsledků.

Dnes bych o tom rád pohovořil trochu víc a ukázal, jak snadno se dá integrovat s OpenNebula pomocí linstor_un – nového ovladače, který jsem vyvinul speciálně pro tento účel.

Linstor v kombinaci s OpenNebula umožňuje vybudovat rychlý a spolehlivý cloud, který lze snadno nasadit na vlastní infrastrukturu.

Linstor architektura

Linstor sám o sobě není ani souborový systém, ani blokové úložiště, Linstor je orchestrátor, který poskytuje abstraktní vrstvu pro automatizaci vytváření svazků v LVM nebo ZFS a jejich replikaci pomocí DRBD9.

Boření stereotypů

Ale počkat, DRBD? - Proč to automatizovat a jak to vůbec může fungovat?

Vzpomeňme na minulost, kdy byl DRBD8 velmi populární. Jeho standardní použití znamenalo vytvořit jedno velké blokové zařízení a rozřezat ho na mnoho malých kousků pomocí stejného LVM. Druh mdadm RAID-1, ale se síťovou replikací.

Tento přístup není bez nevýhod, a proto se s příchodem DRBD9 změnily principy budování úložiště, nyní je pro každý virtuální stroj vytvořeno samostatné zařízení DRBD.

Přístup nezávislých blokových zařízení umožňuje lepší využití prostoru v clusteru a také přidává řadu dalších funkcí. U každého takového zařízení můžete například určit počet replik, jejich umístění a individuální nastavení. Lze je snadno vytvářet/mazat, pořizovat snímky, měnit velikost, povolit šifrování a další. Stojí za zmínku, že DRBD9 také udržuje kvorum, které se vyhýbá situacím s rozděleným mozkem.

Zdroje a backendy

Při vytváření nového blokového zařízení Linstor umístí požadovaný počet replik na různé uzly v clusteru. Každou takovou repliku budeme nazývat prostředek DRBD.

Zdroje jsou dvou typů:

  • Zdroj dat - představují zařízení DRBD umístěné na uzlu ve fondu LVM nebo ZFS.
    V současné době existuje podpora pro několik backendů a jejich počet neustále roste. K dispozici je podpora pro LVM, ThinLVM a ZFS. Poslední dva umožňují vytvářet a používat snímky.
  • Bezdiskový zdroj - je zařízení DRBD hostované na uzlu bez backendu, ale umožňuje s ním zacházet jako s běžným blokovým zařízením, všechny operace čtení/zápisu budou přesměrovány na datové zdroje. Nejbližším analogem bezdiskových prostředků je iSCSI LUN.

Každý prostředek DRBD může mít až 8 replik a pouze jedna z nich může být ve výchozím nastavení aktivní − Primární, vše ostatní bude Sekundární a jejich použití bude nemožné, pokud bude existovat alespoň jeden primární, to znamená, že budou mezi sebou jednoduše replikovat data.

Namontováním zařízení DRBD do systému se automaticky stane Primární, takže i bezdiskový prostředek v terminologii DRBD může být primární.

Tak proč potřebujeme Linstora?

Tím, že všechny úkoly náročné na zdroje svěříte jádru, je Linstor v podstatě běžnou Java aplikací, která vám umožňuje snadno automatizovat vytváření zdrojů DRBD.
Každý jím vytvořený prostředek bude zároveň nezávislým clusterem DRBD, který funguje nezávisle, bez ohledu na stav řídicí roviny a dalších prostředků DRBD.

Linstor se skládá pouze ze dvou komponent:

  • linstor-řadič - Hlavní řadič, který poskytuje API pro vytváření a správu zdrojů. Komunikuje také se satelity, kontroluje na nich volné místo a odesílá úlohy k vytvoření a odstranění nových zdrojů. Běží v jedné instanci a používá databázi, která může být buď interní (H2) nebo externí (PostgreSQL, MySQL, MariaDB)
  • linstor-satelit - Instaluje se na všechny storage nody a poskytuje řadiči informace o volném prostoru a také provádí úkoly přijaté z řadiče, aby vytvořil a odstranil nové svazky a zařízení DRBD nad nimi.

Linstor pracuje s následujícími klíčovými koncepty:

  • Uzel — fyzický server, na kterém budou vytvářeny a používány prostředky DRBD.
  • Skladovací bazén - Fond LVM nebo ZFS vytvořený na uzlu, do kterého budou umístěny prostředky DRBD. Možný je i bezdiskový fond – jedná se o fond, do kterého budou umístěny pouze bezdiskové prostředky.
  • definice zdroje - Definice zdroje, ve skutečnosti je to prototyp, který popisuje název a všechny jeho vlastnosti.
  • definice objemu — Definice objemu. Každý prostředek se může skládat z několika svazků, každý svazek musí mít velikost.
  • Výzkumné - Vytvořená instance blokového zařízení, každý prostředek musí být umístěn na konkrétním uzlu a v nějakém fondu úložiště.

Instalace Linstoru

Doporučuji používat Ubuntu jako systém, protože. pro ni existuje hotové PPA:

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

Nebo Debian, kde lze Linstor nainstalovat z oficiálního úložiště 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

Všechno je jednoduché zde:

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

Úložné uzly

Linuxové jádro se aktuálně dodává s modulem jádra ve stromu DRBD8, bohužel nám nevyhovuje a potřebujeme nainstalovat DRBD9:

apt-get install drbd-dkms

Jak ukazuje praxe, většina potíží vzniká právě se skutečností, že do systému je načten modul DRBD8, a nikoli DRBD9. Naštěstí to lze snadno zkontrolovat spuštěním:

modprobe drbd
cat /proc/drbd

Pokud vidíte Verze: 9 - vše je v pořádku, pokud Verze: 8 - znamená to, že se něco pokazilo a je třeba provést další kroky, abyste zjistili příčiny.

Nyní pojďme nainstalovat linstor-satelit и drbd-utils:

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

Vytvořte shluk

Úložné fondy a uzly

Jako backend vezmeme ThinLVM, protože je nejjednodušší a podporuje snímky.
Sada lvm2, pokud jste tak ještě neučinili, a pojďme vytvořit fond ThinLVM na všech našich uzlech úložiště:

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

Všechny další akce lze provádět přímo na ovladači:

Přidáme naše uzly:

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

Pojďme vytvořit úložné fondy:

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

Nyní zkontrolujeme vytvořené fondy:

linstor storage-pool list

Pokud je vše provedeno správně, měli bychom vidět něco jako:

+-------------------------------------------------- -------------------------------------------------- ----+ | StoragePool | uzel | řidič | název bazénu | volná kapacita | celková kapacita | Podporuje snímky | |------------------------------------------------- -------------------------------------------------- ----| | údaje | uzel1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | | údaje | uzel2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | | údaje | uzel3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | pravda | +-------------------------------------------------- -------------------------------------------------- ----+

zdroje DRBD

Nyní se pokusíme vytvořit náš nový zdroj DRBD:

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

Zkontrolujeme vytvořené zdroje:

linstor resource list 

+-------------------------------------------------- -------------------------------------------------- ---+ | uzel | zdroj | StoragePool | VolumeNr | MinorNr | Název zařízení | Přiděleno | v provozu | stát | |------------------------------------------------- -------------------------------------------------- ---| | uzel1 | myres | údaje | 0 | 1084 | /dev/drbd1084 | 52 kB | Nepoužité | Aktualizace | | uzel2 | myres | údaje | 0 | 1084 | /dev/drbd1084 | 52 kB | nepoužité | Aktualizace | +-------------------------------------------------- -------------------------------------------------- ---+

Skvělý! - vidíme, že zdroj byl vytvořen na prvních dvou uzlech, můžeme také zkusit vytvořit bezdiskový prostředek na třetím:

linstor resource create --diskless node3 myres

Na uzlech toto zařízení vždy najdete jako /dev/drbd1084 nebo /dev/drbd/by-res/myres/0

Takto funguje Linstor, od kterého můžete získat více informací oficiální dokumentace.

Nyní budu mluvit o tom, jak jej integrovat s OpenNebula

Nastavení OpenNebula

Nebudu zacházet příliš hluboko do procesu nastavení OpenNebula, protože Všechny kroky jsou podrobně popsány v oficiální dokumentace, na který vám doporučuji odkazovat, budu mluvit pouze o integraci OpenNebula s Linstorem.

linstor_un

Abych tento problém vyřešil, napsal jsem svůj vlastní ovladač - linstor_un, je v současné době k dispozici jako plugin a musí být nainstalován samostatně.

Celá instalace se provádí na frontend uzlech OpenNebula a nevyžaduje další akce na výpočetních uzlech.

Nejprve se musíme ujistit, že máme jq и linstor-klient:

apt-get install jq linstor-client

Tým linstor node list by měl zobrazit seznam uzlů. Všechny výpočetní uzly OpenNebula musí být přidány do clusteru Linstor.

Stáhněte a nainstalujte plugin:

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

Nyní jej musíme přidat do konfigurace OpenNebula, za tímto účelem postupujeme podle popsaných jednoduchých kroků zde.

Poté restartujte OpenNebula:

systemctl restart opennebula

A přidejte naše datová úložiště, systém:

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

A úložiště obrázků:

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

  • Parametr AUTO_PLACE zobrazuje počet replik dat, které budou vytvořeny pro každý nový obrázek v OpenNebula.
  • Parametr CLONE_MODE udává, jak přesně budou obrázky klonovány při vytváření nových virtuálních strojů, snapshot - vytvoří snímek obrazu a nasadí ze snímku virtuální stroj, copy - vytvoří úplnou kopii obrazu pro každý virtuální stroj.
  • В BRIDGE_LIST doporučuje se zadat všechny uzly, které budou použity k provádění operací klonování obrazu.

Úplný seznam podporovaných možností viz README projekt.

Tím je nastavení dokončeno, nyní si můžete stáhnout nějaké zařízení z oficiálního webu OpenNebula Marketplace a vytvořit z něj virtuální stroje.

Odkaz na projekt:
https://github.com/OpenNebula/addon-linstor_un

Zdroj: www.habr.com

Přidat komentář