Úložné systémy – NAS vs. SAN

[gtranslate]

Existuje několik možností, kde mít umístěna svoje či zákaznická data, která server potřebuje ke své práci (soubory, e-maily aj.). Na tyto způsoby se podíváme, vysvětlíme jak fungují tzv. storage a co znamenají pojmy DAS, NAS a SAN.

Cache souborového systému

Nejprve odbočka, která vysvětlí jednu zcela podstatnou vlastnost operačních systémů při nakládání s daty, která čtou a zapisují na disk. Nejprve zapomeňme na storage a mějme data uložená přímo na serveru. Operační systém čte data z disku po blocích (nikoliv po jednotlivých bytech, jeden blok může být velikosti např. 4 kB). Podstatné je též to, že pevné disky jsou velmi pomalé (přečtení či zápis jednoho bloku řádově 10 ms), zatímco operační paměť RAM v počítači je výrazně rychlejší (třeba 1000x).

Nyní si představte, že aplikace požádá operační systém, aby mu z disku přečetla blok č. 7353. Operační systém vyšle příkaz disku, počká až se data z disku přečtou a předá je aplikaci. A co se stane, když někdo po chvilce opět požádá o přečtení stejného bloku z disku? Pokud se od té doby do tohoto bloku nezapisovalo, není zbytečné, aby operační systém znovu vysílal příkaz disku na přečtení tohoto bloku a zase předlouhých 10 ms čekal na výsledek?

Zde přichází na řadu tzv. cache souborového systému (filesystem cache). Operační systém a aplikace typicky nespotřebují veškerou dostupnou operační paměť, vždycky nějaká zbývá. A právě tento nevyužitý zbytek operační systém používá k tomu, aby si ukládal kopii dat přečtených z disku. Takže když se poprvé z disku čte nějaký blok, tak se musí skutečně přečíst z disku, ale hned se také jeho obsah uloží do paměti. Kdykoliv někdo další požádá o přečtení stejného bloku, tak jde výsledek hned z paměti a disku se žádný příkaz na čtení neposílá.

Možná se to nezdá, ale tato “drobná” úprava přináší radikální navýšení výkonu práce s disky. Všimněte si, že když poprvé od startu vašeho počítače spouštíte nějakou aplikaci (třeba Word), tak to docela trvá a disk intenzivně pracuje. Když však tu samou aplikaci spouštíte po chvíli znovu, tak se stane, že se aplikace spustí několikrát rychleji a třeba vůbec nebliká kontrolka práce s diskem. Je to prostě proto, že při prvním spouštění si systém tzv. nacachoval (nakešoval) všechny soubory čtené z disku.

Direct-attached Storage (DAS)

Nejobyčejnější a obvyklý způsob je, že všechna data jsou umístěna přímo na serveru, tedy na pevných discích v něm připojených. Má to své výhody i nevýhody. Výhodou je rychlý přístup, nevýhodou může být komplikovanější sdílení těchto dat s dalšími servery. Tomuto způsobu se říká Direct-attached Storage (DAS).

Storage

Když však chcete dělat věci ve velkém a chcete například vytvářet clustery serverů (tedy skupina serverů, která vykonává stejné činnosti na stejných datech, při poruše se vzájemně zastupují, rozkládají si mezi sebou zátěž), pak potřebujete, aby potřebná data (například zákaznické weby, e-maily) sdílely. K tomu slouží specializovaná zařízená, která jsou určena k tomu, aby tato data uchovávala – storage neboli disková pole. Storage je typicky stroj s velkým množstvím disků, o které se stará a jejich obsah zpřístupňuje dalším. Na jednotlivých serverech (např. webových) pak nejsou tato data umístěna, ale pracuje se s nimi na storage. Tím dojde k oddělení logiky uchovávání dat a zpracování dat. Serveru pak stačí mít třeba jen malý pomalý disk, na němž je uložen operační systém a software. A vedle toho je storage s velkými velmi rychlými a spolehlivějšími disky, na nichž jsou data. Server je se storage propojen přes nějakou počítačovou síť.

Network-attached storage (NAS)

Obvyklým způsobem připojení ke storage přes síť je NAS. V takovém případě dochází ke sdílení dat na úrovni souborů. Je to např. vám jistě známé připojení síťového disku ve Windows (přes protokol SMB), příp. podobná věc v Linuxu ve formě protokolu NFS. Nějaký virtuální disk ze storage se “připojíte” přes síť do svého počítače či serveru, vám se to tváří jako kdyby to byl disk připojený přímo a normálně s ním pracujete.

Rozhodující je, že se pracuje na úrovni souborů. Klient protokolu (tedy váš počítač si server) neví nic o souborovém systému, kde jsou soubory ve skutečnosti uloženy. O filesystem se stará storage a klient mu posílá příkazy typu “dej mi prvních X bytů ze souboru Y” nebo “zapiš data Z na pozici X v souboru Y”.

Tyto protokoly bývají často nestavové – storage nesleduje, který klient má otevřené jaké soubory a co s nimi dělá. Provádí se pouze jednorázové příkazy. To se rozšiřuje např. o nějaké zámky apod.

A teď zásadní poznatek, kvůli čemu píšeme tento článek: V případě NAS nelze využívat cache souborového systému, právě kvůli nestavovosti. My se totiž nemůžeme nijak dozvědět, že nějaký jiný uživatel nějaký soubor na storage změnil a že bychom si měli jeho již neplatnou verzi vyhodit z cache. Takže cache zde vůbec nefunguje. Když pošlete 100x příkaz na přečtení jedné a té samé věci, tak se opravdu 100x přenáší tento příkaz po síti, i když se data mezitím vůbec nezměnila. Ale tak hrozné to zase není, samozřejmě funguje případná souborová cache na straně storage. Ale nikoliv na straně klienta, takže musíme započítat režii síťové komunikace.

NAS je vhodný pro nějaké běžné sdílení dokumentů a jiných souborů v rámci firmy, domácnosti apod. Ale je nevhodný pro použití na vytíženém severu (pro data webů, e-mailů).

Storage area network (SAN)

Pro servery a clustery serverů je jednoznačná volba třetí možnost – SAN. Jedná se o sdílení dat na úrovní bloků a nikoliv na úrovni souborů. Tzn. storage pracuje se surovými daty a nemá pojem o filesystému, který je nad nimi vybudován. Serveru se virtuální disk připojený ze storage jeví jako nenaformátovaný pevný disk, chová se a používá se stejně jako kdyby byl připojen přímo. A server si teprve nad tímto vybuduje souborový systém. Komunikace mezi serverem a storage tedy probíhá stylem “přečti blok X” a “zapiš blok X”. Můžete si to představit tak, že mezi server a pevný disk, který by byl normálně připojen přímo, je jen vložena síť.

Ale v čem je to tak skvělé? Na první pohled to vypadá stejně. Ovšem zde je to zásadní – zde se používá souborová cache na straně serveru. Takže když server 1000x čte stejný soubor, tak jej 1x přečte ze storage (odešle příkaz přes síť a počká na odpověď) a 999x už jej čte ze své RAM (a nic po síti neposílá).

To se typicky děje u webových serverů – drtivá většina souborů se neustále jenom čte, mění se velice výjimečně. Takže opět drtivá většina požadavků na přečtení souboru se uspokojí z RAM serveru a storage o ničem neví. Takže zde je práce s diskem téměř stejně rychlá jako v případě DAS. Už to ale neplatí u e-mailových a databázových serverů, tam se intenzivně vytváření, čtou a mažou relativně malé soubory, u databází se také neustále zapisuje. Zde už tolik cache úspěšná nebude.

Server může mít SAN připojen několika způsoby:

  • Fibre Channel (FC) – optický propojovací systém specializovaný právě na síťová úložiště, velmi rychlý a výkonný, ale výrazně dražší, vyžadující speciální switche
  • iSCSI – SCSI protokol přes IP – levnější řešení, není nutno pořizovat speciální propojovací prvky (využije se stávající IP síť a běžné ethernetové switche, je lepší mít oddělenou síť pro tyto účely, kde se nemíchá jiný IP provoz) a není tak výkonný

Clusterové souborové systémy

Ještě ale musíme vyřešit jeden problém. Máme-li více serverů a jeden storage, může mít každý server připojen svou část prostoru, který storage poskytuje (virtuálnímu disku na storage se říká LUN) a servery tak nepracují se stejnými daty. Potřebujeme-li však cluster serverů, které pracují se stejnými daty, narážíme na problém že není možné jen tak více serverům připojit stejný LUN. Servery totiž předpokládají, že se jedná o jejich disk, jako kdyby byl připojen přímo, a okamžitě by si data zničily, protože by všichni začaly modifikovat datové struktury filesystemu (jelikož o sobě prostě nevědí).

Zde přicházejí na řadu specializované clusterové filesystemy. Typickým příkladem je GFS2 od společnosti Red Hat, který využíváme i my. Jedná se o filesystem doplnění o distribuovaný systém zámků – servery si tedy mezi sebou vyměňují informace o tom, kdo se chystá číst či zapisovat jaký soubor.

Stručně řečeno to vypadá tak, že chce-li server číst nějaký soubor, musí získat zámek pro jeho čtení. Zámek pro čtení může držet více serverů (při čtení si nekolidují), ale v takovém okamžiku nesmí žádný server držet zámek pro zápis. Chceme-li zapisovat, musíme mít zámek pro zápis– ten může držet jen jeden ze serverů a současně žádný server nesmí mít zámek pro čtení stejného souboru (zámek pro zápis je tedy exkluzivní).

Servery si tedy mezi sebou vyměňují informace o tom kdo má jaké zámky na jaké soubory, a když server potřebuje nějaký zámek a jiný server mu v tom brání jiným zámkem, musí jej požádat o jeho uvolnění.

Jak do toho zapadá souborová cache? Dokud všichni jeden konkrétní soubor jen čtou, pak si mohou všichni jeho obsah udržovat v cache. Ale jakmile některý ze serverů požádá o zámek pro zápis, musí si v ten okamžik všichni tento soubor z cache vyhodit.