Správa linuxového serveru: RAID teoreticky
Ještě před tím, než se rozhodnete nainstalovat Debian na server, byste měli zvážit, jakým způsobem budete pracovat s pevnými disky. Mít všechno na jednom disku v jednom či více diskových oddílech je sice možné, ale existují i jiné možnosti, a sice RAID a LVM, potažmo ještě dm-crypt/LUKS pro diskové šifrování. V tomto dílu se budeme věnovat RAIDu.
O RAIDu zde již jeden pěkný článek vyšel - Když se řekne RAID... Nerad bych příliš opakoval to, co tu již zaznělo, a proto teorii omezím na nezbytné minimum a spíše se pokusím přidat několik důležitých praktických pohledů.
Co je RAID? Je to způsob práce se dvěma nebo více pevnými disky jako s jednou logickou datovou jednotkou (blokovým zařízením), která na fyzické úrovni poskytuje jistý kompromis mezi odolností proti výpadku jednoho nebo více disků, kapacitou a výkonem.
Odolnost proti výpadkům je zajišťována jistou formou redundance (liší se u jednotlivých typů RAIDu), která ovšem jistým způsobem snižuje úložný prostor (kapacitu) pole. Typů RAIDu je mnoho, já se zaměřím na ty nejtypičtější a nejzajímavější (informace o ostatních typech naleznete v článcích odkazovaných v závěru článku):
Data se rozmisťují střídavě po všech discích z pole, chybí redundance - ztráta jednoho disku znamená ztrátu všech dat z pole. Výkon je ze všech typů RAIDu nejlepší, kapacita pole je rovna počtu disků.
Zrcadlení. Data se zrcadlí na všechny disky z pole. Kapacita pole je rovna velikosti nejmenšího disku. Čtení z pole je rychlejší (lze číst najednou z více disků), zápis je pomalejší (zapisuje se na všechny disky současně). Pole udrží data při selhání n-1 disků (kde n je počet disků v poli).
Minimem jsou tři disky. Data a paritní informace se rozmisťují střídavě po všech discích z pole. RAID 5 má kapacitu n-1 disků a snese selhání jednoho disku. Čtení z pole je podobně rychlé jako u RAIDu 0, zápis je pomalejší a v tomto případě i náročný na výpočetní výkon (k datům se počítá parita).
Minimem jsou čtyři disky. RAID 6 je podobný RAIDu 5 s tím, že paritní blok není jeden, ale dva, takže pole, které má kapacitu n-2 disků, unese selhání kterýchkoliv dvou z nich. Výkon RAIDu 6 je podobný jako výkon RAIDu 5, náročnost na výpočetní výkon je ovšem o něco vyšší (počítají se dva paritní bloky).
RAID 10 je kombinací RAIDu 1 a 0 v tomto pořadí. Tj. nejprve se vytvoří dvě RAID 1 pole, a poté se nad nimi postaví RAID 0. Výhodou je dobrý poměr mezi odolností a výkonem.
RAID 15 (nebo RAID 51) je kombinací RAIDu 1 a 5. Bývá označován jako RAID pro paranoidní, neb poskytuje poměrně velkou odolnost, za kterou se ovšem platí drastickým úbytkem kapacity.
Záleží na tom, co máte k dispozici (počet disků/rozpočet) a co chcete získat (rychlost, odolnost proti výpadkům, apod.). Na menších serverech se velmi často používají typy 1, 5 a 10. Podstatným kritériem výběru je počet disků - u dvou použijete nejspíše typ 1, u třech a více budete vybírat mezi typy 5 a 10. Při větším počtu disků (nad 10) stojí za uváženou nahradit RAID 5 RAIDem 6, popřípadě zvolit pro vyšší odolnost RAID 51 nebo 61. Pro náš LAMP servřík plně postačí typ 1 (zrcadlení).
Je jasné, že při propojení více pevných disků do diskového pole postupně vzrůstá pravděpodobnost selhání některého z disků. Z tohoto důvodu musíte při velkém počtu disků počítat s rizikem selhání více disků krátce po sobě, a upravit volbu typu RAIDu podle toho.
Ideální je dávat do RAIDu různé disky (stejné kapacity) od různých výrobců (nejlépe ještě různě staré, ale to už bych asi chtěl trošku moc). Snížíte tak pravděpodobnost kritického selhání, pokud byste měli smůlu a nakoupili disky ze série, která má výrobní vadu (a kde by disky selhaly současně nebo krátce po sobě). Čas od času se každému výrobci disků "poštěstí" vydat sérii s nějakou více či méně kritickou vadou. Pokud nebudete kupovat disky od různých výrobců, je dobré koupit alespoň disky z různých sérií.
Kvalitní hardwarový řadič s baterií zálohovanou vyrovnávací pamětí může být dobrým důvodem, proč nepoužít linuxový softwarový RAID. Levným RAID řadičům (zejména pak těm, které naleznete na desktopovém hardwaru) bych se raději vyhnul ve prospěch sofwarového RAIDu. V případě hardwarového RAIDu je dobré pamatovat na to, že RAID řadiče od různých výrobců spolu obvykle nejsou kompatibilní - vaše data tedy mohou být vázána na příslušný typ hardwarového řadiče od jistého výrobce (s tím, že pokud by se řadič rozbil, už byste se k datům bez náhradního řadiče nemuseli dostat).
Redundance svádí k tomu považovat RAID za jistý typ zálohování. To je však velmi špatný přístup. Selhat může ledacos, počínaje více disky, než kolik vám kryje redundance, přes řadič či softwarový RAID až po operační systém, aplikaci, uživatele či administrátora. RAID je vhodným prostředkem pro zajištění odolnosti serveru proti výpadku pevného disku, ale zálohování nemůže nahradit.
Při použití RAIDu je vhodné nejenom počítat s možným selháním disku, ale také zauvažovat o tom, co se stane pak. Mnohé typy RAIDů se používají tak, že sice snesou výpadek jednoho disku, ale pokud se tak stane, celé pole pak obvykle visí na vlásku - stačí selhání dalšího disku k tomu, abyste přišli o data.
Dovolte mi tento problém demonstrovat na příkladu. Řekněme, že jste si zvolili RAID 5 o třech discích a jeden vám selhal. V této situaci máte pole sice funkční, ale degradované, bez jakékoliv redundance. Pevné disky už za sebou nějaký čas mají, takže riziko dalšího selhání tu je, a ne úplně nepatrné. Výměna disku a opatření náhrady vám zabere nějaký čas. Ale ani po tom, co disk seženete a vyměníte, není vyhráno. Dokonce lze říci, že v té chvíli to nehorší teprve začne - bude třeba pole rekonstruovat, což obnáší přečtení všech nebo velké části dat ze zbývajících disků. Pokud při tomto procesu vypadne další disk, je po všem. Teprve ve chvíli, kdy bude nový disk zapojen a synchronizován se zbytkem pole, si můžete opravdu oddechnout.
Z tohoto hlediska nemusí být úplně od věci provést po selhání a těsně před vložením nového disku rozdílovou zálohu (pokud tedy používáte přírůstkové zálohování). O zálohování pojednává článekZálohujeme pomocí Dump/Restore.
Jednou z možností, jak zkrátit dobu mezi selháním disku, jeho výměnou a zařazením nového disku do pole, je použití náhradních (spare) disků. To jsou disky, které jsou sice zařazené v diskovém poli, ale nepoužívají se, alespoň do doby, než nějaký disk z pole selže. Poté se ihned spustí rekonstrukce pole s pomocí tohoto náhradního disku.
Dodávám, že vzhledem k předchozímu bodu to nemusí být to pravé ořechové úplně ve všech situacích.
Po výměně defektního disku za nový začíná rekonstrukce pole. To obnáší přečtení všech sektorů ze všech disků. Disky si ovšem někdy usmyslí, že některý sektor z nějakého důvodu nepřečtou (o tomhle pojednává lehce katastrofický článek Why RAID 5 stops working in 2009, který zmiňuji především kvůli zajímavým komentářům). Pokud se na takový sektor natrefí během rekonstrukce, vypadne obvykle příslušný disk z pole, a máme velký problém.
Důvodů, proč některý sektor nepůjde přečíst, může být celá řada, počínaje výpadkem proudu, když zrovna probíhá zápis, nebo prostě vznik špatného sektoru. Ano, moderní pevné disky mají oblast záložních (spare) sektorů, kam špatné sektory realokují. Jenomže, realokace špatného sektoru se provádí při zápisu, nikoliv při čtení (čtení se totiž může podařit některým z opakovaných pokusů). Tudíž nás realokace v tomto směru nezachrání.
Dalším možným problémem je situace, kdy se vlivem softwarové chyby či výpadku proudu při zápisu ztratí konzistence mezi daty a paritní informací. To sice nevyvolá chybu čtení či výpadek dalšího disku, dokonce i rekonstrukce úspěšně proběhne, ale zapíšou se špatná data (a co je horší - vy se nic nedozvíte).
Abyste těmto problémům do jisté míry předešli, je vhodné RAID 5 i RAID 6 podrobit čas od času kontrole. Některé hardwarové řadiče to provádí automaticky (doporučuji zkontrolovat), v případě softwarového RAIDu v Linuxu je to zatím záležitost, která vyžaduje trošku manuální práce - umístění následujícího příkazu do cronu a jeho periodické opakování v řádu dní až jednoho týdne:
echo "check" > /sys/block/raid_zarizeni/md/sync_action
V rámci RAIDu se nijak neverifikují zapsaná data. To znamená, že RAID je zranitelný vůči poškození dat(třeba vlivem špatného kabelu nebo řadiče, chyby v RAM modulu, apod.).
S takovou situací už jsem se jednou setkal - u jednoho levného SATA řadiče docházelo k bitovým chybám při čtení/zápisu, následkem čehož v delším období došlo ke rozsáhlému poškození dat na (softwarovém) RAIDu 1, který jsem na něm provozoval. I proto zdůrazňuji, že RAID není náhradou zálohování.
Poškození dat je to nejhorší, s čím se lze setkat - je totiž obvykle nepostřehnutelné. V době, kdy se váš systém začne chovat divně nebo dojde k nějaké jiné události, která vás donutí dívat se tímto směrem, může být již pozdě (a co je horší - chyby v datech se mohou promítnout i do záloh). Tohle třeba pěkně řeší ZFS(souborový systém od Sunu), který, na rozdíl od tradičních linuxových souborových systémů jako ext3 či reiserfs, dohlíží na integritu dat. Bohužel, ZFS v Linuxu není a z licenčních důvodů asi ani nebude. Máme pouze BTRFS, který zatím, soudě podle projektové wiki, stále není určený pro produkční nasazení.
Z tohoto důvodu nelze než doporučit alternativní postupy - Tripwire, md5sum nebo podobné nástroje pro kontrolu integrity vybraných souborů.
Chcete-li být zodpovědní, RAID nemůžete nechat běžet bez nějaké formy monitorování, které vás informuje v případě nějaké významné události (zejména pak výpadku pevného disku). Měli byste si tedy vytvořit nějaký systém monitorování diskového pole, abyste byli včas varováni, že máte vyměnit disk nebo (v horším případě) obnovit data ze záloh.
V Linuxu existuje nástroj mdadm, který umožňuje nejenom provádět správu softwarového RAIDu, ale je schopen fungovat i jako démon, dohlížet nad softwarovým RAIDem a informovat vás (třeba e-mailem), že došlo k nějaké významné události. Jeho konfiguraci se budu věnovat po instalaci Debianu. V tuto chvíli vám postačí vědět, že diskové pole je třeba nějakým způsobem monitorovat.