RAID revisitert
Da jeg var en nybegynnertekniker og knapt visste noe om systemadministrasjon, var ett av de få temaene vi alltid forventet å kunne grundig RAID – Redundant Array of Inexpensive Disks. Det var svaret på alle lagringsvanskene våre. Med RAID kunne vi skalere filsystemene våre større, få bedre gjennomstrømning og til og med legge til redundans som lot oss overleve tapet av en disk, noe som – spesielt den gang – skjedde ganske regelmessig. Med fremveksten av NAS- og SAN-lagringsapparater forsvinner ferdighetene med å gå ned til det fysiske lagringsnivået og justere det til å møte systemets behov raskt. Dette er ikke bra. Bare fordi vi avlaster lagring til eksterne enheter, endrer det ikke det faktum at vi trenger å fundamentalt forstå lagringen vår og konfigurere den til å møte de spesifikke behovene til systemene våre.
En misforståelse som ser ut til å ha kommet inn i bransjen de siste fem til ti årene er troen på at RAID på en eller annen måte representerer en systemsikkerhetskopi. Det gjør det ikke. RAID er en form for feiltoleranse. Sikkerhetskopiering og feiltoleranse er svært forskjellige konseptuelt. Sikkerhetskopiering er designet for å la deg gjenopprette etter at en katastrofe har inntruffet. Feiltoleranse er designet for å redusere sjansen for katastrofe i utgangspunktet. Tenk på feiltoleranse som å bygge et gjerde øverst på en klippe og sikkerhetskopiering som å bygge et sykehus nederst på den. Du vil aldri egentlig være i en situasjon uten både et gjerde og et sykehus, men de er definitivt forskjellige ting.
Når vi implementerer RAID for diskene våre, enten lokalt tilkoblet eller på et eksternt apparat som SAN, har vi fire viktige RAID-løsninger å velge mellom i dag for virksomhet: RAID 1 (speiling), RAID 5 (striping med paritet), RAID 6 (striping med dobbel paritet) og RAID 10 (speiling med striping). Det finnes andre, som RAID 0, som bare bør brukes i sjeldne tilfeller når du virkelig forstår behovene til diskundersystemet ditt. RAID 50 og 51 brukes også, men langt sjeldnere og er langt mindre effektive. For ti år siden var RAID 1 og RAID 5 vanlige, men i dag har vi flere alternativer.
La oss gå gjennom alternativene og diskutere noen grunnleggende tall. I eksemplene våre vil vi bruke n til å representere antall stasjoner i arrayet vårt, og vi vil bruke s til å representere størrelsen på en enkelt stasjon. Ved å bruke disse kan vi uttrykke det brukbare lagringsrommet til et array, noe som gjør sammenligninger enkle med hensyn til lagringskapasitet.
RAID 1: I denne RAID-typen speiles stasjoner. Du har to stasjoner og de gjør alt sammen på samme tid, derav «speiling». Speiling er ekstremt stabilt ettersom prosessen er så enkel, men den krever at du kjøper dobbelt så mange stasjoner som du ville trengt hvis du ikke brukte RAID overhodet, ettersom den andre stasjonen din er dedikert til redundans. Fordelen er at du har forsikringen om at hvert bit du skriver til disk skrives to ganger for din beskyttelse. Så med RAID 1 beregnes kapasiteten til å være (n*s/2). RAID 1 lider av å gi minimale ytelsesforbedringer over ikke-RAID-stasjoner. Skrivehastigheter tilsvarer et ikke-RAID-system, mens lesehastigheter er nesten dobbelt så raske i de fleste situasjoner siden stasjonene under leseoperasjoner kan tilgå parallelt for å øke gjennomstrømningen. RAID 1 er begrenset til to-stasjons-sett.
RAID 5: Striping med enkelt paritet. I denne RAID-typen skrives data i et komplekst stripe over alle stasjonene i arrayet med en distribuert paritetsdatablokk som eksisterer over alle stasjonene. Ved å gjøre dette er RAID 5 i stand til å bruke et vilkårlig stort array av tre eller flere disker og mister bare lagringskapasiteten tilsvarende en enkelt disk til paritet, selv om pariteten er distribuert og ikke eksisterer utelukkende på noen enkelt fysisk disk. RAID 5 brukes ofte på grunn av sin kostnadseffektivitet på grunn av sitt manglende tap av lagringskapasitet i store arrays. I motsetning til speiling krever striping med paritet at det utføres en beregning for hver skrive-stripe over diskene, og dette skaper noe overhead. Gjennomstrømningen er derfor ikke alltid en åpenbar beregning og er tungt avhengig av den beregningsmessige kraften til systemet som utfører paritetberegningen. Beregning av RAID 5-kapasitet er ganske enkel siden den rett og slett er ((n-1)*s). Et RAID 5-array kan overleve tapet av en enkelt disk i arrayet.
RAID 6: Redundant striping med dobbel paritet. RAID 6 er praktisk talt identisk med RAID 5, men bruker to paritetsdatablokker per stripe i stedet for én for å gi ytterligere beskyttelse mot diskfeil. RAID 6 er et nyere medlem av RAID-familien, lagt til flere år etter at de andre nivåene hadde blitt standardisert. RAID 6 er spesielt ved at det tillater svikt i to stasjoner i et array uten å lide datatap. Men for å imøtekomme det ekstra nivået av redundans mister et RAID 6-array lagringskapasiteten tilsvarende to stasjoner i arrayet og krever minimum fire stasjoner. Vi kan beregne kapasiteten til et RAID 6-array med ((n-2)*s).
RAID 10: Speiling pluss striping. Teknisk sett er RAID 10 en hybrid RAID-type som omfatter et sett med RAID 1-speil som eksisterer i en ikke-paritet-stripe (RAID 0). Mange leverandører bruker begrepet RAID 10 (eller RAID 1+0) når de snakker om bare to stasjoner i et array, men teknisk sett er det RAID 1 ettersom striping ikke kan forekomme før det er minimum fire stasjoner i arrayet. Med RAID 10 må stasjoner legges til i par, så bare et partall stasjoner kan eksistere i et array. RAID 10 kan overleve tapet av opptil halvparten av det totale settet med stasjoner, men maksimalt ett fra hvert par. RAID 10 involverer ikke en paritetberegning, noe som gir det en ytelsesfordel over RAID 5 eller RAID 6 og krever mindre beregningsmessig kraft for å drive arrayet. RAID 10 leverer den største leseytelsen av noen vanlig RAID-type ettersom alle stasjoner i arrayet kan brukes samtidig i leseoperasjoner, selv om skriveytelsen er mye lavere. RAID 10 sin kapasitetsberegning er identisk med den for RAID 1, (n*s/2).
I dagens enterprise er det sjelden at en IT-avdeling har et seriøst behov for å vurdere noen annen stasjonskonfigurasjon enn de fire nevnt her, uavhengig av om programvare- eller maskinvare-RAID implementeres. Tradisjonelt var den største bekymringen i en RAID-array-beslutning basert rundt brukbar kapasitet. Dette var fordi stasjoner var dyre og små. I dag er stasjoner så store at lagringskapasitet sjelden er et problem, i det minste ikke slik det var for bare noen få år siden, og kostnadene har falt slik at kjøp av ekstra stasjoner nødvendig for bedre stasjonredundans generelt er en liten bekymring. Når kapasitet er premiumvare, er RAID 5 et populært valg fordi det mister minst lagringskapasitet sammenlignet med andre arraytyper, og i store arrays er lagringtstapet nominelt.
I dag har vi generelt andre bekymringer, primært datasikkerhet og ytelse. Å bruke litt ekstra for å sikre databeskyttelse bør være et åpenbart valg. RAID 5 lider av å kunne miste bare én enkelt stasjon. I et array med bare tre medlemmer er dette bare litt farligere enn beskyttelsen som tilbys av RAID 1. Vi kunne overleve tapet av en av tre stasjoner. Ikke for skremmende sammenlignet med å miste en av to stasjoner. Men hva med et stort array, si seksten stasjoner. Å bare kunne miste én av seksten stasjoner sikkert burde få oss til å sette spørsmålstegn ved påliteligheten vår litt mer grundig.
Det er her RAID 6 trådte inn for å fylle gapet. RAID 6, brukt i et stort array, introduserer et svært lite tap av lagringskapasitet og ytelse, mens det gir forsikringen om å kunne miste to stasjoner. Tilhengere av striping-med-paritet-leiren vil ofte sitere disse tallene for å berolige ledelsen om at RAID 5/6 kan gi tilstrekkelig «valuta for pengene» i lagringsundersystemer, men det er andre faktorer i spill.
Nesten fullstendig oversett i diskusjoner om RAID-pålitelighet – et altfor sjelden diskutert tema som det er – er spørsmålet om påliteligheten til paritetberegning. Med RAID 1 eller RAID 10 utføres ingen «beregning» for å lage en stripe med paritet. Data skrives rett og slett på en stabil måte. Når en stasjon svikter, tar partneren over lasten og stasjonens ytelse er litt redusert inntil partneren erstattes. Det er ingen gjenoppbyggingsprosess som påvirker eksisterende stasjonmedlemmer. Ikke slik med paritet-striper.
RAID-arrays med paritet har operasjoner som innebærer å beregne hva som er og hva som bør være på stasjonene. Selv om denne beregningen er svært enkel, gir den en mulighet for at ting kan gå galt. En arraykontroller som svikter med RAID 1 eller RAID 10 kunne, i teorien, skrive dårlige data over innholdet på stasjonene, men det finnes ingen prosess der kontrolleren gjør stasjonendringer på egen hånd, så dette er ekstremt usannsynlig noen gang å inntreffe ettersom det aldri er en «gjenoppbygging»-prosess bortsett fra ved oppretting av et speil.
Når arrays med paritet utfører en gjenoppbyggingsoperasjon, utfører de en kompleks prosess der de går gjennom hele innholdet på arrayet og skriver manglende data tilbake til den erstattede stasjonen. I seg selv er dette relativt enkelt og bør ikke gi noen grunn til bekymring. Det jeg og andre har sett på nært hold er et litt annerledes scenario som involverer disker som har mistet tilkoblingen på grunn av løse koblinger til arrayet. Stasjoner kan vanligvis «riste» seg løse over tid etter hvert som de sitter i en server, spesielt etter flere års bruk i et alltid-på-system.
Det som kan skje, i ekstreme scenarioer, er at gode data på stasjoner kan overskrives av dårlige paritetdata når en arraykontroller tror at én eller flere stasjoner har sviktet i rekkefølge og er blitt brakt tilbake på nett for gjenoppbygging. I dette tilfellet har selve stasjonene ikke sviktet og det er ikke noe datatap. Alt som kreves er at stasjonene settes på plass igjen, i teorien. På hot-swap-systemer er administrasjonen av stasjonsgjenoppbygging ofte automatisk basert på fjerning og erstatning av en defekt stasjon. Så denne prosessen med å miste og erstatte en stasjon kan oppstå uten menneskelig intervensjon – og en gjenoppbyggingsprosess kan begynne. Under denne prosessen er stasjonssystemet i fare, og skulle denne samme hendelsen inntreffe igjen, kan stasjon-arrayet, basert på stasjonenes status, begynne å stripe dårlige data over stasjonene og overskrive det gode filsystemet. Det er et av de mest deprimerende syner for en serveradministrator å se når et system uten defekte stasjoner mister et helt array på grunn av en unødvendig gjenoppbyggingsoperasjon.
I teorien skal denne typen situasjon ikke forekomme og det er sikkerhetsmekanismer på plass for å beskytte mot det, men bestemmelsen fra en lavnivå-stasjonskontroller om statusen til en stasjon for øyeblikket og tidligere og kvaliteten på dataene som befinner seg på den stasjonen er ikke så enkel som det kan virke, og det er mulig at feil kan oppstå. Selv om denne situasjonen er usannsynlig, skjer den, og den legger til en nesten umulig å beregne risiko for RAID 5- og RAID 6-systemer. Vi må vurdere risikoen for paritetfeil i tillegg til den tradisjonelle risikoen beregnet fra antallet stasjonsfeil som et array kan overleve fra en pool. Etter hvert som stasjoner blir mer pålitelige, blir betydningen av paritetfeilrisikohendelsen større.
I tillegg introduserer RAID 5- og RAID 6-paritet systemoverhead på grunn av paritetberegning, som ofte håndteres ved hjelp av dedikert RAID-maskinvare. Denne beregningen introduserer latens i stasjonundersystemet som varierer dramatisk etter implementering både i maskinvare og programvare, noe som gjør det umulig å angi ytelsestall for RAID-nivåer mot hverandre, ettersom hver implementering vil være unik.
Muligens det største problemet med RAID-valg i dag er at enkelheten som lagringseffektivitet og stasjonsfeil-overlevelse kan beregnes med, maskerer det store bildet av pålitelighet og ytelse ettersom disse statistikkene er nesten fullstendig utilgjengelige. En av farene ved beregninger er at folk vil fokusere på faktorer som enkelt kan måles og ignorere de som ikke enkelt kan måles, uavhengig av deres potensielle innvirkning.
Selv om alle moderne RAID-nivåer har sin plass, er det kritisk at de vurderes innenfor kontekst og med en forståelse av hele omfanget av risikoene. Vi bør arbeide hardt for å skifte bransjen fra en standard av RAID 5 til en standard av RAID 10. Stasjoner er billige og datatap er dyrt.
[Redaksjonell merknad: I årene siden dette opprinnelig ble skrevet har fremveksten av URE (Unrecoverable Read Errors) risikoer under gjenoppbyggingsoperasjoner forskjøvet de primære risikoene fra de som er oppført til URE-relaterte risikoer for paritet-arrays.]
