En jämförelse mellan RAID 10 och RAID 01
Dessa två RAID-nivåer ger ofta upphov till en enorm förvirring, delvis eftersom de felaktigt används som om de vore utbytbara och ofta helt enkelt för att de är dåligt förstådda.
Först bör det påpekas att båda kan skrivas med eller utan plustecknet: RAID 10 är RAID 1+0 och RAID 01 är RAID 0+1. Märkligt nog skrivs RAID 10 nästan aldrig med plustecknet och RAID 01 nästan aldrig utan. Lagringsingenjörer är i allmänhet överens om att plustecknet aldrig används eftersom det är överflödigt.
Båda dessa RAID-nivåer är “sammansatta” nivåer som skapas genom att två olika, enkla RAID-typer kombineras. Båda är spegelbaserade, paritetslösa sammansatta eller nästlade RAID. Båda har i stort sett identiska prestandaegenskaper – försumbar overhead och latens med NX-läshastighet och (NX)/2-skrivhastighet, där N är antalet diskar i arrayen och X är prestandan hos en enskild disk i arrayen.
Det som skiljer de två RAID-nivåerna åt är hur de hanterar diskfel. Den snabba översikten är att RAID 10 är extremt säker i nästan alla rimliga scenarier. RAID 01 blir dock snabbt ganska riskabel i takt med att arrayens storlek ökar.
I en RAID 10 leder förlusten av en enskild disk till att en enda RAID 1-uppsättning inuti RAID 0-stripen försämras. Stripenivån påverkas inte alls, utan endast den enda RAID 1-spegeln. Alla andra speglar förblir opåverkade. Det innebär att vår enda ökade risk är att den enskilda disken nu körs utan redundans och saknar skydd. Alla andra speglade uppsättningar behåller fullt skydd. Vår exponering är alltså en enda, oskyddad disk – ungefär som man skulle förvänta sig i en stationär dator.
Reparation av en försämrad RAID 10 är det snabbast möjliga reparationsscenariot. När en trasig disk byts ut sker inget annat än att den enda spegeln byggs om – vilket är en enkel kopieringsoperation som äger rum på RAID 1-nivån, under RAID 0-stripen. Det innebär att om hela arrayen är inaktiv kan speglingsprocessen fortgå med full hastighet och den övergripande arrayen har ingen aning om att detta ens pågår. En disk-till-disk-spegling är extremt snabb, effektiv och tillförlitlig. Detta är ett idealiskt återställningsscenario. Även om flera speglar är försämrade samtidigt och repareras samtidigt uppstår ingen ytterligare påverkan, eftersom ombyggnaden av den ena inte påverkar de andra. Både risk och reparationspåverkan för RAID 10 skalar extremt väl.
RAID 01 förlorar däremot en hel RAID 0-stripe omedelbart när den förlorar en enda disk. I en typisk RAID 01-spegel finns det två RAID 0-stripar. Det innebär att hälften av hela arrayen har fallerat. Om vi talar om en RAID 01-array med åtta diskar gör felet på en enda disk att fyra diskar omedelbart blir obrukbara och i praktiken fallerade (hårdvaran behöver inte bytas ut, men data på diskarna är inaktuella och måste byggas om för att vara användbara). Ur ett riskperspektiv kan vi alltså betrakta det som ett fel på hela stripen.
Det som återstår efter att en enda disk har fallerat är inget annat än en enda, oskyddad RAID 0-stripe. Detta är betydligt farligare än det motsvarande RAID 10-felet, eftersom det i stället för att bara finnas en enda, isolerad hårddisk i riskzonen nu finns minst två diskar och potentiellt många fler i riskzonen, och varje disk som exponeras för denna risk förstärker risken avsevärt.
Som ett exempel har vi i den minsta möjliga RAID 10- eller RAID 01-arrayen fyra diskar. I RAID 10, om en disk fallerar, är vår risk att dess motsvarande partner också fallerar innan vi har byggt om arrayen. Vi oroar oss bara för den enda disken; alla andra diskar i RAID 10-uppsättningen är fortfarande skyddade och säkra. Endast denna enda disk är av betydelse. I en RAID 01, när den första disken fallerar, blir dess partner i dess RAID 0-uppsättning omedelbart oanvändbar och i praktiken fallerad, eftersom den inte längre är brukbar i arrayen. Det som återstår är två diskar utan något skydd som kör enbart RAID 0, och därmed har vi samma risk som RAID 10 hade, fast två gånger om. Varje disk har samma risk som den enda disken hade tidigare. Detta gör vår risk, i bästa fall, mycket högre.
Men för ett mer dramatiskt exempel ska vi titta på en stor RAID 10- och RAID 01-array med tjugofyra diskar. Återigen, med RAID 10, om en disk fallerar är alla andra, utom dess enda partner, fortfarande skyddade. Den extra storleken på arrayen lade till nästan noll ytterligare risk. Vi fruktar fortfarande bara att den enda ensamma disken ska fallera. Jämför detta med RAID 01, där en av dess RAID 0-arrayer skulle ha fallerat och slagit ut tolv diskar på en gång genom att en enda fallerade, vilket lämnar de övriga tolv diskarna i en RAID 0 utan någon form av skydd. Sannolikheten att en av tolv diskar fallerar är uppenbarligen betydligt högre än sannolikheten att en enda disk fallerar.
Detta är inte hela bilden. Återställningen av den enda RAID 10-disken är snabb, det är en rak kopieringsoperation från en disk till den andra. Den använder minimala resurser och tar bara så lång tid som krävs för att en enda disk ska läsa och skriva sig själv i sin helhet. RAID 01 har inte samma tur. Till skillnad från RAID 10, som bara bygger om en liten delmängd av hela arrayen – och en delmängd som inte växer i takt med att arrayen växer; tiden för att återställa en RAID 10 med fyra diskar eller en RAID 10 med fyrtio diskar efter ett fel är identisk – måste RAID 01 bygga om en hel halva av hela den överordnade arrayen. När det gäller arrayen med fyra diskar är detta dubbelt så mycket ombyggnadsarbete som RAID 10, men när det gäller arrayen med tjugofyra diskar är det tolv gånger så mycket ombyggnadsarbete som ska utföras. RAID 01-ombyggnader tar alltså längre tid att genomföra samtidigt som de är utsatta för betydligt högre risk under den tiden.
Det finns en ganska seglivad myt om att RAID 01 och RAID 10 har olika prestandaegenskaper, men det har de inte. Båda använder ren striping och spegling, vilka i praktiken är operationer utan overhead som kräver nästan ingen processorbelastning. Båda får full läsprestanda från varje diskenhet som är ansluten till dem och båda förlorar hälften av sin skrivprestanda till sin speglingsoperation (förutsatt tvåvägsspeglar, vilket är den enda vanliga användningen av endera arraytypen). Det finns helt enkelt inget som gör RAID 01 eller RAID 10 snabbare eller långsammare än den andra. Båda är extremt snabba.
På grund av de två arraytypernas egenskaper står det klart att RAID 10 är den enda av de två som någonsin bör existera inom en enskild array-styrenhet. RAID 01 är onödigt farlig och medför inga fördelar. De använder samma kapacitets-overhead, de har samma prestanda, de kostar lika mycket att implementera, men RAID 10 är betydligt mer tillförlitlig.
Så varför existerar RAID 01 överhuvudtaget? Delvis existerar den på grund av okunskap eller förvirring. Många som implementerar sina egna sammansatta RAID-arrayer väljer RAID 01 eftersom de har hört myten att den är snabbare och, som vanligtvis är fallet med RAID, inte undersöker varför den skulle vara snabbare och glömmer att titta på dess tillförlitlighet och andra faktorer. RAID 01 implementeras i lokala arrayer i själva verket endast av misstag.
Men när vi tar RAID till nätverkslagret finns det nya faktorer att ta hänsyn till, och då kan RAID 01 bli viktig, liksom dess sällsynta kusin RAID 61. Vi anger, via Network RAID Notation, var de lokala och var nätverkslagren i RAID:en befinner sig. I detta fall menar vi alltså RAID 0(1) ELLER RAID 6(1). Parenteserna anger att RAID 1-spegeln, den “högsta” delen av RAID-stacken, ligger över en nätverksanslutning och inte på den lokala RAID-styrenheten.
Hur skulle detta se ut i RAID 0(1)? Om du har två servrar, var och en med en vanlig RAID 0-array, och du vill att de ska synkroniseras tillsammans för att fungera som en enda, tillförlitlig array, kan du använda en teknik såsom DRBD (på Linux) eller HAST (på FreeBSD) för att skapa en RAID 1-array över nätverk av den lokala lagringen på respektive server. Detta medför uppenbarligen mycket prestanda-overhead eftersom RAID 1-arrayen måste hållas synkroniserad över den LAN-anslutning som har hög latens och låg bandbredd. RAID 0(1) är beteckningen för denna konfiguration. Om varje lokal RAID 0-array byttes ut mot en mer tillförlitlig RAID 6 skulle vi skriva hela konfigurationen som RAID 6(1).
Varför accepterar vi risken med RAID 01 när den ligger över ett nätverk men inte när den är lokal? Detta beror på nätverkslänkens natur. När det gäller RAID 10 förlitar vi oss på RAID 1-delen på låg nivå i RAID-stacken för skydd, och RAID 0 ligger ovanpå. Om vi replikerar detta på nätverksnivå, såsom RAID 1(0), blir resultatet att varje värd har en enda spegel som endast representerar en del av arrayens data. Om något skulle hända med någon nod i arrayen eller om nätverksanslutningen skulle fallera, skulle arrayen omedelbart förstöras och varje nod skulle lämnas med oanvändbara, ofullständiga data. Det är den höga risken för nodfel och risken på nätverksanslutningsnivå som gör RAID-beslut i en nätverksmiljö extremt annorlunda. Detta blir ett komplext ämne i sig.
Det räcker med att säga att man, när man arbetar med vanliga RAID-array-styrenheter eller med lokal lagring och mjukvaru-RAID, uteslutande ska använda RAID 10 och aldrig RAID 01.
