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

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

Nedávno představili lidé z LINBIT své nové SDS řešení — Linstor. Je to zcela otevřené úložiště, které spočívá na osvědčených technologiích: DRBD, LVM, ZFS. Linstor kombinuje jednoduchost a dobře promyšlenou architekturu, což umožňuje dosáhnout stability a dostatečně impozantních výsledků.

Dnes bych chtěl o něm říct něco více a ukázat, jak snadno jej lze 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 rychlou a spolehlivou cloudovou infrastrukturu, kterou lze bez problémů nasadit na vlastní infrastruktuře.

Architektura Linstoru

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

Zbořme stereotypy

Ale počkejte, DRBD? — Proč ho automatizovat a jak to vůbec může fungovat?

Vzpomínáme na minulost, kdy byl populární DRBD8. Jeho standardní použití zahrnovalo vytvoření jednoho velkého blokového zařízení a jeho rozdělení na mnoho malých kousků pomocí LVM. Takový mdadm RAID-1, ale s replikací přes síť.

Takový přístup není bez nedostatků, a proto s příchodem DRBD9 došlo ke změně principů budování úložiště, nyní se pro každou virtuální mašinu vytváří samostatné DRBD zařízení.

Přístup s nezávislými blokovými zařízeními umožňuje lépe využívat prostor v klastru a také přidává řadu dalších možností. Například pro každé takové zařízení lze určovat počet replik, jejich umístění a individuální nastavení. Jejich snadné vytváření/odstraňování, provádění snapshotů, změna velikosti, aktivace šifrování a mnoho dalšího. Je třeba poznamenat, že DRBD9 také podporuje kvórum, které pomáhá vyhnout se situacím split-brain.

Zdroje a backendy

Při vytváření nového blokového zařízení Linstor umisťuje požadovaný počet replik na různé uzly v klastru. Každou takovou repliku budeme nazývat DRBD zdrojem.

Zdroje jsou dvou typů:

  • Data zdroj — představují DRBD zařízení umístěné na uzlu v LVM nebo ZFS poolu.
    V současné době existuje podpora několika backendů a jejich počet neustále roste. Existuje podpora LVM, ThinLVM a ZFS. Poslední dvě umožňují vytvářet a používat snapshoty.
  • Diskless-ressource — představuje DRBD zařízení umístěné na nodě 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žší analog diskless-ressourcím je iSCSI LUN.

Každý DRBD zdroj může mít až 8 replik a pouze jedna z nich může být ve výchozím nastavení aktivní — Primary, všechny ostatní budou Secondary a jejich použití nebude možné, dokud bude existovat alespoň jeden Primary, tedy budou pouze replikovat data mezi sebou.

Připojením DRBD zařízení do systému se automaticky stává Primary, takže dokonce i Diskless-ressource, v terminologii DRBD, může být Primary.

Tak proč je potřebný Linstor?

Svěřením všech náročných úloh jádru, Linstor v podstatě představuje obyčejnou Java aplikaci, která umožňuje snadno automatizovat vytváření DRBD zdrojů.
Přitom každý vytvořený zdroj bude představovat nezávislý DRBD klastr, který funguje samostatně, bez ohledu na stav control-plane a ostatních DRBD zdrojů.

Linstor se skládá pouze ze dvou komponent:

  • Linstor-controller — Hlavní kontroler, který poskytuje API pro vytváření a správu zdrojů. Také komunikuje se satelity, kontroluje volné místo na nich a posílá úkoly pro vytváření a mazání nových zdrojů. Spouští se v jediné instanci a používá databázi, která může být jak interní (H2), tak externí (PostgreSQL, MySQL, MariaDB).
  • Linstor-satellite — Instaluje se na všechny storage-nody a poskytuje kontrolerovi informace o volném prostoru, a také vykonává úkoly, které dostane od kontroleru, pro vytváření a mazání nových objemů a DRBD zařízení nad nimi.

Linstor operuje s následujícími klíčovými pojmy:

  • Node — fyzický server, na kterém budou vytvářeny a používány DRBD zdroje.
  • Úložiště — LVM nebo ZFS pool vytvořený na nodě, ve kterém budou umístěny DRBD zdroje. Je také možný diskless pool — to je pool, ve kterém budou umístěny pouze diskless zdroje.
  • Definice zdroje — Definice zdroje, v podstatě je to prototyp, který popisuje název a všechny jeho vlastnosti.
  • Definice objemu — Definice objemu. Každý zdroj se může skládat z několika objemů, každý objem musí mít velikost.
  • Zdroje — Vytvořená instance blokového zařízení, každý zdroj musí být umístěn na určité uzlu a v nějakém úložném poolu.

Instalace Linstoru

Jako systém doporučuji použít Ubuntu, protože pro něj existuje hotové PPA:

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

Nebo Debian, kde lze Linstor nainstalovat z oficiálního repozitáře pro 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

Ovladač

Tady je to jednoduché:

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

Úložné uzly

V současnosti se v jádře Linux dodává in-tree modul jádra DRBD8, bohužel nám nevyhovuje a musíme nainstalovat DRBD9:

apt-get install drbd-dkms

Jak ukazuje praxe, většina obtíží vzniká právě tím, že je do systému načten modul DRBD8, nikoliv DRBD9. Naštěstí to lze snadno zkontrolovat provedením:

modprobe drbd
cat /proc/drbd

Pokud uvidíte verze: 9 — znamená to, že je vše v pořádku, pokud verze: 8 — znamená, že něco není v pořádku a je nutné podniknout další kroky k zjištění příčin.

Nyní nainstalujeme linstor-satellite a drbd-utils:

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

Vytvoření clusteru

Úložné pooly a uzly

Jako backend vezmeme ThinLVM, protože je nejjednodušší a podporuje snapshoty.
Nainstalujte lvm2, pokud jste to ještě neudělali, a pojďme vytvořit ThinLVM pool na všech našich úložných uzlech:

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

Všechny další akce mohou být prováděny přímo na kontroleru:

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

Vytvoříme úložné pooly:

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é pooly:

linstor storage-pool list

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

+-------------------------------------------------------------------------------------------------------+
| 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 zdroje

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

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

Ověříme vytvořené zdroje:

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 |
+------------------------------------------------------------------------------------------------------+

Skvěle! — vidíme, že zdroj byl vytvořen na prvních dvou nodech, můžeme také zkusit vytvořit diskless zdroj na třetím:

linstor resource create --diskless node3 myres

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

Takto Linstor funguje, můžete získat více informací z oficiální dokumentaci.

Nyní vám povím, jak jej integrovat s OpenNebula

Nastavení OpenNebula

Nebudu se příliš zabývat procesem nastavení OpenNebula, protože všechny kroky jsou podrobně popsány v oficiální dokumentaci, na kterou vám doporučuji se obrátit, povím pouze o integraci OpenNebula s Linstor.

linstor_un

Pro tento úkol jsem napsal vlastní ovladač — linstor_un, v současnosti je k dispozici jako plugin a měl by být nainstalován zvlášť.

Celá instalace probíhá na frontend OpenNebula nodech a nevyžaduje žádné dodatečné kroky na compute nodech.

Nejprve se musíme ujistit, že máme jq a linstor-client:

apt-get install jq linstor-client

Tým linstor node list by měla vrátit seznam nodů. Všechny compute nody OpenNebula by měly být přidány do klastru Linstor.

Stáhneme a nainstalujeme 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í je potřeba přidat jej do konfigurace OpenNebula, k tomu provedeme několik jednoduchých kroků, jak je popsáno. zde.

Poté restartujeme OpenNebula:

systemctl restart opennebula

A přidáme naše datastory, systémový:

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ě obrazů:

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

  • Parameter AUTO_PLACE udává počet replik dat, které budou vytvořeny pro každý nový obraz v OpenNebula.
  • Parameter CLONE_MODE určuje, jak přesně budou obrazy klonovány při vytváření nových virtuálních strojů, snapshot — vytvoří snapshot obrazu a z něj spustí virtuální stroj, smazat — vytvoří plnou kopii obrazu pro každý virtuální stroj.
  • V BRIDGE_LIST je doporučeno uvést všechny uzly, které budou používány k provádění operací klonování obrazů.

Úplný seznam podporovaných parametrů je uveden v README projektu.

Tím je nastavení dokončeno, nyní je možné stáhnout nějaký appliance z oficiálního OpenNebula Marketplace a vytvořit z něj virtuální stroje.

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

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster