Linux SW RAID
V Linuxu můžeme použít 3 typy RAIDů:
- Linux SW RAID, který je realizován kompletně Linux-em
- FakeRAID neboli SW RAID v BIOSu počítače, který je realizován BIOSem, ale nad kterým v Linux-u máme kontrolu jen v případě, že máme funkční Linux driver k chipsetu, který tento SW RAID realizuje
- plně HW RAID - v základních sestavách běžných počítačů a serverů jej nehledejte, za řadič plně HW RAID si musíte připlatit. Z vlastní neblahé zkušenosti HW RAID doporučuji pouze v případě, kdy máte více strojů se stejným řadičem, jinak v případě, že máte stroj pouze 1, řadič umře a stejný se už dávno neprodává, už z disků s např. RAID5 data neodstanete. Proto HW RAID v tomto článku nebudu vůbec řešit.
Výhody a nevýhody FakeRAIDu a Linux SW RAIDu
Jeden aspekt, který nemůžu srovnat, je hotswap disků. V Linux SW RAID je sice možné hotswap částečně naprogramovat, ale je to hodně práce (viz níže). Jak se hotswap disků dělá v BIOS (Fake) RAIDu, netuším, nikdy jsem to nezkoušel.
Linux SW RAID
- Výhody:
- do Linux SW RAIDu lze zapojit různě velké disky - nezapojují se totiž celé disky, ale jejich partitions. Pokud po letech provozu selže jeden ze starých disků a do RAIDu vložíme nový disk s násobnou velikostí, není jeho zbylá volná kapacita promarněna - můžeme ji využít na ukládání nekritických dat, popř. můžeme zbylou kapacitu do RAIDu zapojit později, až vyměníme i ten zbývající starý malý disk
- Linux SW RAID je nezávislý na HW počítače. Pokud shoří základní deska a disky přežijí, můžete disky vložit do jakéhokoli jiného počítače a server máte okamžitě znovu online, v plné parádě včetně funkčního RAIDu, bez potřeby jakéhokoli nastavování v Linuxu.
- Linux SW RAID je plně funkční, odladěný a stabilní systém, určený pro nasazení v ostrém provozu. Což se mnohdy od Linux driverech BIOS SW RAIDu nedá říci.
- Nevýhody:
- je potřeba se naučit syntaxi příkazů mdadm :-)
- ve srovnání s plně HW RAIDem asi menší rychlost a větší zátěž CPU
FakeRAID - BIOS SW RAID
- Výhody:
- Je možný dual-boot Windows-Linux, oba OS vidí RAID jako jeden disk (u Linux serverů vás ale tato výhoda asi nezaujme..)
- Jednoduché ovládání - nemusíte se učit syntaxi příkazů mdadm :-)
- disky v SW BIOS RAIDu se v Linux-u tváří jako jeden disk, takže můžete nabootovat např. z nějakého live CD, které nemusí podporovat Linux SW RAID, a přesto uvidíte ten samý disk, který je stále plně funkční RAID, zatímco u disků Linux SW RAIDu byste viděli jeho jednotlivé komponenty. Novější Live CD si ale Linux SW RAID dokážou nadetekovat a normálně poskládat.
- Nevýhody:
- pokud jeden z disků v RAIDu umře a výrobce FakeRAIDu neposkytuje SW k jeho správě přímo ve vašem OS, pak musíte po vložení nového disku rebootovat a v BIOSu nový disk nastavit. Váš server bude v té době offline. Toto u Linux RAIDu nehrozí, pokud jsou vaše disky hotswap.
- Pokud umře základní deska, musíte najít nějakou se stejným BIOSem/chipsetem, jinak svoje diskové pole nesložíte. U RAID1 (mirroring) budete schopni provozovat aspoň jeden disk, ale pokud budete chtít poskládat z disků svého bývalého RAIDu opět funkční pole, s jiným BIOSem/chipsetem budete mít asi smůlu. V takovém případě budete muset vytvořit nové prázdné pole a na ně nahrát data ze zálohy.
- Linux nemusí mít ovladač pro daný BIOS SW RAID, nebo ovladač nemusí být stabilní - viz např. FakeRAID pro chipset ICH9. Což je u nového HW vcelku běžný problém. Pokud nemáte funkční ovladač, nedokážete pole z Linuxu ovládat, tj. nedokážete za provozu přidávat další disky, neuvidíte vzniklé chyby, neuvidíte postup synchronizace u nového disku atd.
- Většina BIOS SW RAIDů neumožňuje nastavovat parametry typu "Minimální/maximální rychlost synchronizace", což může ovlivnit výkon vašeho serveru v době, kdy by se synchornizace prováděla
Ovládání Linux SW RAID
Výpadek disku
Pokud disk ještě máte v zařízeních /dev (tj. pokud ještě nějakým způsobem žije, UDEV systém nebo reboot jej neodstranil), označte jej jako vadný, například takto:
mdadm -f /dev/md0 /dev/sda1 mdadm -f /dev/md1 /dev/sda2 mdadm -f /dev/md2 /dev/sda3
Pro testování kompletního výpadku disku můžete využít tento skript.
Přidání disku do pole
Pokud chceme přidat do pole disk (např. poté, co jsme jej odstranili při výpadku pomocí mdadm -f), použijeme např. tyto příkazy:
mdadm -a /dev/md0 /dev/sda1 mdadm -a /dev/md1 /dev/sda2 mdadm -a /dev/md2 /dev/sda3
Nebo tento skript, který to udělá z nás - ale jen v případě, kdy již disk byl v poli zapojen, takže příkaz (např.) "mdadm --examine --scan /dev/sda1" u něj vytiskne "ARRAY /dev/md0 level=raid1 num-devices=2 UUID=...", tj zjistí, do kterého RAID zařízení daná partition patří:
#!/bin/bash # Tento skript uložte v /usr/local/sbin/add-all-raid-parts for i in $( ls $1* ); do #split the output of mdadm scan ("ARRAY /dev/md? level=raid1 num-devices=2 UUID=...") #so MD_DEVICE will contain /dev/md? read -d ] ARR MD_DEVICE REST< <(IFS=' '; echo `mdadm --examine --scan $i`) if [ "" != "$MD_DEVICE" ]; then echo "Adding $i into RAID device=$MD_DEVICE" mdadm -a $MD_DEVICE $i fi done
Skript pak můžete zavolat např. takto:
add-all-raid-parts /dev/sda
Nastavení parametrů synchronizace
Po přidání disku do pole začne Linux na něj synchronizovat data RAID pole. Jak rychle se bude tato synchronizace provádět, můžeme sami ovládat a tím určovat, kolik % volného CPU a IO času sychronizace zabere, a to pomocí nastavení proměnných /proc/sys/dev/raid/speed_limit_min (defaultně má hodnotu 1000) a /proc/sys/dev/raid/speed_limit_max (defaultně má hodnotu 200000).
Pokud chceme synchronizaci rychlejší, proveďte tento příkaz
cat 200000 > /proc/sys/dev/raid/speed_limit_min
Jak zabránit plné resynchronizaci při pádu systému nebo vyjmutí disku
Pokud následkem nějaké chyby (násilné vyjmutí disku, pád OS) dojde k tomu, že se pole rozsynchronizuje, čeká vás zdlouhavá resynchronizace - defaultně se resync dělá v RAID1 jako prostá kopie "čisté" RAID partitiony do té "špinavé" (dirty). U RAID partitions, které mají stovky GB, si počkáte i několik hodin.
V těchto případech se ale dá kompletní resynchronizaci zabránit použitím tzv. "write intent bitmapy", kterou vytvoříte takto:
mdadm --grow --bitmap=internal /dev/md*
Více viz stránka o Linux SW RAID bitmapách na RAID wiki kernel.org
Monitoring RAIDu
Postup synchronizace
Pokud přidáme do RAIDu disk, můžeme sledovat postup jeho synchronizace např. takto:
more /proc/mdstat
Což vypíše u plně synchronizovaných RAID zařízení:
md0 : active raid1 sda1[0] sdb1[1] 497856 blocks [2/2] [UU]
A u RAID zařízení, kde synchornizace právě probíhá:
md1 : active raid1 sda2[2] sdb2[1] 468752512 blocks [2/1] [_U] [=>...................] recovery = 5.4% (25333888/468752512) finish=66.8min speed=110468K/sec
Status synchronizace se vypisuje také příkazem
mdadm --detail /dev/md1
Který při synchronizaci vypíše toto:
/dev/md1: Version : 00.90 Creation Time : Mon Jan 4 15:06:14 2010 Raid Level : raid1 Array Size : 468752512 (447.04 GiB 480.00 GB) Used Dev Size : 468752512 (447.04 GiB 480.00 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Thu Mar 18 10:34:57 2010 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 6% complete UUID : 511ea31a:0a968ed8:25791403:81883028 Events : 0.826942 Number Major Minor RaidDevice State 2 8 2 0 spare rebuilding /dev/sda2 1 8 18 1 active sync /dev/sdb2
Zasílání emailů
Ze všeho nejvíc nás zajímá chvíle, kdy jeden disk v RAIDu selže - budeme chtít, aby nám systém poslal email. V Debian-u je to jednoduché - při instalaci balíku mdadm se také automaticky spustí mdadm v monitor módu jako démon, takže stačí jen v souboru /etc/mdadm/mdadm.conf nastavit řádky
MAILADDR mujmail@mojedomena.cz MAILFROM mujmail@mojedomena.cz
Hotswap disků
Správná otázka: umí Linux SW RAID hotswap? Tj. můžu přijít k serveru, vytrhnout z něj za provozu disk bez toho, abych jej musel nejdřív na příkazové řádce označit jako vadný, a pak jej do systému za provozu vrátit? Tak, jak to umožňují plně HW RAID řadiče?
Odpověď je: ano, je to možné, ale není to tak jednoduché jako u HW RAIDu.
Více viz můj článek na wiki Debianu