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

Na základě původní aplikace NBD vzniklo několik různých samostatných odnoží tohoto konceptu, ale protože její vývoj stále probíhá a postupně jsou do ní implementovány nové vlastnosti, mnohé z nich již odešly ze scény (např. ENBD, které vyžadovalo vlastní jaderný modul, který není součástí vanilla jádra), nebo jsou pro svou úzkou specializací omezeny na jednu distribuci (GNBD od Red Hatu, které je optimalizované pro použití s GFS2)

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