Linux SW RAID: Porovnání verzí

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání
Řádek 31: Řádek 31:


=Ovládání Linux SW RAID=
=Ovládání Linux SW RAID=
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ýpadek disku==
==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:
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:
Řádek 67: Řádek 76:
==Nastavení parametrů synchronizace==
==Nastavení parametrů synchronizace==
Po přidání disku do pole začne Linux na něj synchronizovat data RAID pole.
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 %CPU sychronizace sebere, a to pomocí nastavení
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).
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).



Verze z 26. 3. 2010, 09:48

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 vřele nedoporučuji.

Výhody a nevýhody BIOS 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

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ý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 

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