Sammenligning av RAID 10 og RAID 01
Disse to RAID-nivåene skaper ofte enorm forvirring, delvis fordi de feilaktig brukes om hverandre, og ofte simpelthen fordi de er dårlig forstått.
Først bør det påpekes at begge kan skrives med eller uten plusstegn: RAID 10 er RAID 1+0 og RAID 01 er RAID 0+1. Merkelig nok skrives RAID 10 nesten aldri med plusset, og RAID 01 skrives nesten aldri uten. Lagringsteknikere er generelt enige om at plusset aldri brukes fordi det er overflødig.
Begge disse RAID-nivåene er «sammensatte» nivåer laget av to forskjellige, enkle RAID-typer som kombineres. Begge er speilbaserte, ikke-paritetbaserte sammensatte eller nestede RAID-konfigurasjoner. Begge har i praksis identiske ytelsesegenskaper – minimal overhead og latens med NX lesehastighet og (NX)/2 skrivehastighet, der N er antall disker i arrayen og X er ytelsen til en enkelt disk i arrayen.
Det som skiller de to RAID-nivåene er hvordan de håndterer disksvikt. Den raske oversikten er at RAID 10 er ekstremt sikkert under nesten alle rimelige scenarier. RAID 01 derimot blir raskt ganske risikabelt etter hvert som arrayens størrelse øker.
I et RAID 10-oppsett fører tap av én enkelt disk til at ett enkelt RAID 1-sett inne i RAID 0-stripen degraderes. Stripe-nivået ser ingen degradering, bare det ene RAID 1-speilet gjør det. Alle andre speil er upåvirket. Dette betyr at vår eneste økte risiko er at den ene enkle disken nå kjører uten redundans og ikke har noen beskyttelse. Alle andre speilede sett beholder fortsatt full beskyttelse. Vår eksponering er altså én enkelt, ubeskyttet disk – omtrent som man ville forvente i en stasjonær maskin.
Arrayreparasjon i et degradert RAID 10 er det raskest mulige reparasjonsscenariet. Når en sviktet disk erstattes, er alt som skjer at det ene speilet gjenoppbygges – som er en enkel kopieringsoperasjon som skjer på RAID 1-nivå, under RAID 0-stripen. Dette betyr at hvis den samlede arrayen er inaktiv, kan speilingsprosessen foregå med full hastighet, og den samlede arrayen har ingen anelse om at dette skjer. En disk-til-disk-speiling er ekstremt rask, effektiv og pålitelig. Dette er et ideelt gjenopprettingsscenario. Selv om flere speil har degradering samtidig og gjenoppbygges parallelt, er det ingen ekstra påvirkning, ettersom gjenoppbyggingen av ett ikke påvirker de andre. RAID 10-risiko og reparasjonsbelastning skalerer begge svært godt.
RAID 01, derimot, mister ved tap av én enkelt disk umiddelbart en hel RAID 0-stripe. I et typisk RAID 01-speil finnes det to RAID 0-striper. Dette betyr at halvparten av hele arrayen har sviktet. Hvis vi snakker om en RAID 01-array med åtte disker, gjør svikten av én disk fire disker umiddelbart ubrukelige og effektivt sviktet (maskinvaren trenger ikke å erstattes, men dataene på diskene er utdaterte og må gjenoppbygges for å være nyttige). Fra et risikoperspektiv kan vi altså se det som en svikt i hele stripen.
Det som gjenstår etter at én disk har sviktet er ingenting annet enn én enkelt, ubeskyttet RAID 0-stripe. Dette er langt farligere enn tilsvarende RAID 10-svikt, fordi i stedet for at bare én isolert harddisk er utsatt, er nå minst to disker – og potensielt mange flere – utsatt, og hver disk som eksponeres for denne risikoen forsterker risikoen betraktelig.
Som eksempel: i den minst mulige RAID 10- eller RAID 01-arrayen har vi fire disker. I RAID 10 – hvis én disk svikter – er vår risiko at dens matchende partner også svikter før vi har gjenoppbygget arrayen. Vi er bare bekymret for den ene disken; alle andre disker i RAID 10-settet er fortsatt beskyttet og trygge. Bare denne ene er av bekymring. I RAID 01, når den første disken svikter, er dens partner i RAID 0-settet øyeblikkelig ubrukelig og effektivt sviktet, ettersom den ikke lenger er operativ i arrayen. Det som gjenstår er to disker uten beskyttelse som bare kjører RAID 0, og vi har dermed den samme risikoen som RAID 10 hadde, to ganger. Hver disk har den samme risikoen som den ene disken hadde før. Dette gjør vår risiko, i beste fall, mye høyere.
Men for et mer dramatisk eksempel, la oss se på en stor RAID 10- og RAID 01-array med tjuefire disker. Igjen med RAID 10: hvis én disk svikter, er alle andre, bortsett fra dens ene partner, fortsatt beskyttet. Den ekstra størrelsen på arrayen la til nesten null ekstra risiko. Vi frykter fortsatt bare svikten av den ene ensomme disken. Sammenlign dette med RAID 01, som ville ha fått en av sine RAID 0-arrayer til å svikte, og ta tolv disker ut på én gang ved svikt av én disk, og etterlate de andre tolv diskene i et RAID 0 uten noen form for beskyttelse. Sjansen for at én av tolv disker svikter er åpenbart betydelig høyere enn sjansen for at én enkelt disk svikter.
Dette er ikke hele bildet. Gjenoppretting av den ene RAID 10-disken er rask; det er en ren kopieringsoperasjon fra én disk til den andre. Den bruker minimale ressurser og tar bare så lang tid som er nødvendig for at én disk skal lese og skrive seg selv i sin helhet. RAID 01 er ikke like heldig. I motsetning til RAID 10, som bare gjenoppbygger et lite delsett av hele arrayen – og et delsett som ikke vokser ettersom arrayen vokser (tiden for å gjenopprette en fire-disks RAID 10 eller en førti-disks RAID 10 etter svikt er identisk) – må RAID 01 gjenoppbygge en hel halvdel av den overordnede arrayen. I tilfellet med den fire-disks arrayen er dette det dobbelte av gjenoppbyggingsarbeidet til RAID 10, men i tilfellet med den tjuefire-disks arrayen er det tolv ganger mer gjenoppbyggingsarbeid som skal gjøres. Så RAID 01-gjenoppbygginger tar lengre tid å utføre mens de er under betydelig mer risiko i løpet av den tiden.
Det eksisterer en ganske vedvarende myte om at RAID 01 og RAID 10 har ulike ytelsesegenskaper, men det har de ikke. Begge bruker enkel striping og speiling, som i praksis er operasjoner med null overhead som krever nesten ingen prosesseringsoverhead. Begge får full leseytelse fra hver diskenheten som er koblet til dem, og begge mister halvparten av sin skriveytelse til speilingsoperasjonen (forutsatt toveisspeiler, som er den eneste vanlige bruken av begge array-typene). Det er rett og slett ingenting som gjør RAID 01 eller RAID 10 raskere eller tregere enn den andre. Begge er ekstremt raske.
På grunn av egenskapene til de to array-typene er det klart at RAID 10 er den eneste typen, av de to, som noensinne bør eksistere innenfor en enkelt array-kontroller. RAID 01 er unødvendig farlig og har ingen fordeler. De bruker samme kapasitetsoverhead, de har den samme ytelsen, de koster det samme å implementere, men RAID 10 er betydelig mer pålitelig.
Så hvorfor eksisterer RAID 01 i det hele tatt? Delvis eksisterer det av uvitenhet eller forvirring. Mange som implementerer sine egne sammensatte RAID-arrayer, velger RAID 01 fordi de har hørt myten om at det er raskere, og slik det generelt er med RAID, undersøker de ikke hvorfor det skulle være raskere, og glemmer å se på påliteligheten og andre faktorer. RAID 01 implementeres virkelig bare på lokale arrayer ved en feil.
Imidlertid, når vi tar RAID til nettverkslaget, er det nye faktorer å vurdere, og RAID 01 kan bli viktig, det samme kan dens sjeldne fetter RAID 61. Vi betegner via nettverks-RAID-notasjon hvor de lokale og nettverkslagene til RAID befinner seg. Så i dette tilfellet mener vi RAID 0(1) ELLER RAID 6(1). Parentesene angir at RAID 1-speilet, den «høyeste» delen av RAID-stakken, er over en nettverksforbindelse og ikke på den lokale RAID-kontrolleren.
Hvordan ville dette se ut i RAID 0(1)? Hvis du har to servere, hver med en standard RAID 0-array, og du vil at de skal synkroniseres sammen for å fungere som en enkelt, pålitelig array, kan du bruke en teknologi som DRBD (på Linux) eller HAST (på FreeBSD) for å lage en nettverks-RAID 1-array av den lokale lagringen på hver server. Dette har åpenbart mye ytelsesoverhead, siden RAID 1-arrayen må holdes synkronisert over den høy-latens, lavbåndbredde LAN-forbindelsen. RAID 0(1) er notasjonen for dette oppsettet. Hvis hver lokal RAID 0-array ble erstattet med en mer pålitelig RAID 6, ville vi skrive hele oppsettet som RAID 6(1).
Hvorfor aksepterer vi risikoen ved RAID 01 når det er over et nettverk, men ikke når det er lokalt? Dette skyldes nettverksforbindelsens natur. I tilfellet med RAID 10 er vi avhengige av den lavnivå RAID 1-delen av RAID-stakken for beskyttelse, og RAID 0 sitter på toppen. Hvis vi replikerer dette på et nettverksnivå som RAID 1(0), vil resultatet være at hver vert har et enkelt speil som bare representerer en del av arrayens data. Hvis noe skulle skje med noen node i arrayen, eller hvis nettverksforbindelsen skulle svikte, ville arrayen øyeblikkelig bli ødelagt og hver node ville stå igjen med ubrukelige, ufullstendige data. Det er nettopp den høye risikoen for nodesvik og risikoen på nettverksforbindelsesnivå som gjør RAID-beslutninger i en nettverksetting ekstremt annerledes. Dette blir et komplekst emne i seg selv.
Det er nok å si at når man arbeider med normale RAID-array-kontrollere eller med lokal lagring og programvare-RAID, bør man utelukkende bruke RAID 10 og aldri RAID 01.
