NBD

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Network Block Device je specificky linuxová technologie síťového sdílení blokových zařízení, postavená na konceptu klient/server, kterou začal programovat Pavel Machek v dubnu 1997.

Základní princip

Linuxové jádro po načtení modulu nbd vytvoří lokální blokové zařízení ( /dev/nbd0, /dev/nbd1,... ) na které lze prostřednictvím klientské aplikace připojit přes TCP protokol nasdílené blokové zařízení z jiného stroje. Tím však nemusí být pouze skutečné fyzické blokové zařízení, ale i soubor, např. iso CD nebo image virtuálního stroje.

Server
který na vzdáleném stroji vyčkává a nabízí na vybraném rozhraní a portu blokové zařízení (nebo soubor), nevyžaduje žádný speciální ovladač, může v podstatě běžet na libovolné platformě podporující síťování přes TCP/IP protokol.
Klient
Klientská aplikace, která zajišťuje připojení vzdáleného stroje k lokálnímu blokovému zařízení je úzce svázaná s linuxovým jádrem a vyžaduje zavedený modul nbd.

Aplikace

Původní implementace NBD byla velmi jednoduchá a měla svá omezení. Proto vzniklo postupem času několik forků, které se snažily její možnosti dále rozšířit a vylepšit. Její vývoj však stále probíhá a tak vývoj těchto forků časem byl ukončen, neboť vlastnosti kterými se odlišovaly byly postupně implementovány.

Kupř. vývoj ENBD (Enhanced Network Block Device), které vylepšovalo přístup ke vzdálenému blokovému zařízení probíhal od prosince 2001 do listopadu 2002 a skončil přechodem na kernel řady 2.6.

Dalším forkem, který zůstal pro svou úzkou specializaci omezen prakticky pouze na jednu distribuci bylo GNBD ( GFS Network Block Device) od Red Hatu. Šlo v podstatě o NBD optimalizované pro použití s clusterovým souborovým systémem GFS2 a podporou připojení několika klientských aplikací k jednomu serveru najednou. (Původní NBD aplikace umožňovala připojit k jedné instanci serveru pouze jednoho klienta).

Jen pro úplnost bych zmínil ještě DNBD (Distributed Network Block Device) což zase byla read-only implementace NBD pro použití u bezdiskových klientských stanic, jejíž vývoj probíhal od dubna 2008 do června 2009.

Prozatím poslední samostatnou implementací NBD je xNBD, které rozšiřuje původní koncept o možnost provádět na straně serveru živou migraci blokových zařízení zároveň s migrací běžících virtuálních strojů mezi fyzickými stroji skrze WAN. To je prozatím nejvýznamnější vlastnost, která ještě není do původní vývojové větve NBD aplikací nějakým způsobem implementována.

Využití xNBD při live migraci KVM virtuálu

Spuštění xnbd-serveru v režimu PROXY

spustit..

Spuštění virtuálního stroje s parametrem --incoming

spustit..
spustit..
První fáze - spuštění xnbd-server v režimu PROXY a virtuálního stroje s parametrem --incoming
Druhá fáze - spuštění migrace virtuálního stroje
Třetí fáze - dokončení migrace virtuálního stroje (zastavení jeho původní instance)
Čtvrtá fáze - přesun chybějících datových bloků
Pátá fáze - přepnutí xnbd-serveru z režimu PROXY do režimu TARGET a zastavení jeho původní instance

Využití xNBD při live snapshotu KVM virtuálu

Spuštění xnbd-server v režimu PROXY a přesun datových bloků do snapshotu blokového zařízení Paralelně s probíhajícím přesunem datových bloků lze spustit i provedení live snapshotu technikou "fake" migrace do souboru


Jak NBD funguje?

Opravdu vyčerpávající popis NBD naleznete na webu http://www.linuxjournal.com/article/3778

Server

jak už bylo zmíněno v úvodu, na rozdíl od klienta není server závislý na platformě a vývojář Folkert van Heusden vytvořil variace původního NBD serveru pro MS Windows XP, či "platformně nezávislý" (alébrž Java) NBD server v Javě.

Z pohledu uživatele linuxu je však zajímavá především již zmíněná xNDB implementace serveru. Ta totiž kromě toho, že funguje tak jako klasický NBD server, umí pracovat i jako proxy. Data se postupně přenášejí po síti podle potřeby z jednoho stroje na druhý, aniž by tím byl nějak výrazně omezován síťový provoz, a živá migrace vlastního virtuálního stroje se provede teprve po jejich přenesení.

Výrazně se tím omezí množství přenášených dat uložených na virtuálních discích během vlastní migrace virtuálu, takže tato operace pak může proběhnout mnohem rychleji.

Po přesunu lze pak server utilitou xnbd-bgctl přepnout z režimu proxy do režimu target a server na původním stroji se může odstavit.

NBD server

Ovšem NBD server má své vychytávky..

  • Oproti xNBD poporuje autorizaci
  • Umožňuje nabídnout jako jedno zařízení soubor rozdělený do více kusů (multiple file)
  • Umožňuje omezit počet připojených klientů

xNBD server

  • Umožňuje vypisovat monitorovací výstup buď na standarní konzoli, nebo do logovacího souboru (zatím co NBD server běží vždy jako démon a žádný monitorovací výstup nemá)
  • Parametrem lze při startu určit, v jakém má běžet v režimu target|cow-target|proxy a pomocí utility xnbd-bgctl lze pak monitorovat a do určité míry i řídit jak má nakládat s datovými bloky

Klient

NBD klient

xNBD klient

Syntaxe xNBD klienta se od "obyčejného" NBD poněkud liší. Podporuje sice i syntaxi původního klienta, ale jeho vlastní syntaxe umožňuje předat k připojení několik vzdálených strojů současně. Klient se pokusí připojit první z nich, ale pokud je z nějakého důvodu nedostupný a připojení se do určité doby nepodaří, vyzkouší automaticky další stroj v pořadí.

Původní klient umožňuje předat pouze jedno připojení.

xNBD klient od verze 0.1.0-pre umožňuje také použít pro připojení local-linkovou IPv6 adresu (kterou lze zjistit dotazem přes multicast na příslušném rozhraní)

Parametry

--blocksize (výchozí 1024) min. 512 max. 4096

--timeout
Časový interval po kterém má klient zabalit pokusy o připojení a přejít k dalšímu stroji v seznamu.
--retry
umožňuje nastavit kolikrát se má klient o připojení pokusit, než přejde k dalšímu kontaktu
--recovery-command
umožňuje předat k vykonání nějaký příkaz v případě že došlo k neočekávanému ukončení spojení
--recovery-command-reboot
je drsnější variantou předchozího parametru, která v případě selhání spojení klientský stroj zrestartuje.

(Při testu ovšem došlo ke zpanikaření)

--exportname
V případě že

WatchDog

xnbd-watchdog hlídá zda je připojení v pořádku