
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 :
add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get updateNebo 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 updateOvladač
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-dkmsJak 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/drbdPokud 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-satelliteVytvoř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/thinpoolVš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.13Vytvoří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/thinpoolNyní zkontrolujeme vytvořené pooly:
linstor storage-pool listPokud 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 2Ověří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 myresNa 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 .
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 , 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č — , 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-clientTý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-masterNyní je potřeba přidat jej do konfigurace OpenNebula, k tomu provedeme několik jednoduchých kroků, jak je popsáno. .
Poté restartujeme OpenNebula:
systemctl restart opennebulaA 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.confA ú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_PLACEudává počet replik dat, které budou vytvořeny pro každý nový obraz v OpenNebula. - Parameter
CLONE_MODEurč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_LISTje 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 projektu.
Tím je nastavení dokončeno, nyní je možné stáhnout nějaký appliance z oficiálního a vytvořit z něj virtuální stroje.
Odkaz na projekt:
Zdroj: habr.com
