NBD

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

Network Block Device je linuxová záležitost, založená na konceptu klient/server. Jádro po načtení modulu nbd vytvoří několik lokálních blokových zařízení /dev/nbd0, /dev/nbd1, .... Na každé z nich pak lze připojit prostřednictvím klientské aplikace (nbd-client, xnbd-client, etc.) přes TCP protokol serverovou aplikací z jiného stroje nabízené jedno blokové zařízení. Tím může být jak skutečné fyzické blokové zařízení, tak 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č, a teoreticky by mohl 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 závislá na linuxovém jádře a vyžaduje zavedený modul nbd.

NBD začal programovat Pavel Machek v dubnu 1997. Jeho vývoj stále probíhá a postupně jsou do něj implementovány vlastnosti různých samostatných odnoží tohoto konceptu. Některé z nich již díky tomu postupem času již odešly ze scény (např. ENBD, které vyžadovalo jaderný modul, který není součástí vanilla jádra), nebo jsou svou úzkou specializací omezeny (GNBD od Red Hatu je optimalizované pro použití s GFS2)

xNBD

https://bitbucket.org/hirofuchi/xnbd/wiki/Home

Prozatím poslední rozšířenou implementací NBD je xNBD, které původní koncept rozšířilo tak, aby na straně serveru bylo možné provádět živou migraci blokových zařízení zároveň s migrací spuštěných virtuálních strojů mezi fyzickými stroji skrze WAN.

  • Jak klientská, tak serverová aplikace by měly mít lepší výkon při IO operacích než původní NBD, protože využívají přímý přístup do paměti přes mmap()
  • xNBD umožňuje konkureční přístup k jednomu serveru současně z více klientů a podporuje koncept Copy-on-Write
  • Umožňuje live migraci datového prostoru na pozadí
  • Podporuje IPv6
Poznámka Podpora IPv6 a přístup do paměti přes mmap() již byly do určité míry implementovány i do NBD


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