Hot Spare eller Hot Mess
Ett vanligt tillvägagångssätt för att lägga till ett säkerhetslager i RAID är att ha reservdisk(ar) tillgängliga så att ersättningstiden för en trasig disk minimeras. Den mest extrema formen av detta kallas att ha en “hot spare” – en reservdisk som faktiskt sitter i arrayen men är oanvänd tills arrayen upptäcker ett diskhaveri, varvid systemet automatiskt inaktiverar den trasiga disken och aktiverar hot spare-disken, precis som om en människa just hade plockat ut den ena disken ur arrayen och satt in den andra, vilket gör att en resilver-operation (en återuppbyggnad av arrayen) kan påbörjas så snart som möjligt. Detta kan minska tiden för att byta in en ny disk från timmar eller dagar till sekunder och kan, i teorin, ge en extrem ökning av säkerheten.
För det första vill jag ta upp det som jag personligen anser vara ett misstag i namngivningskonventionerna. Det vi kallar en hot spare borde, anser jag, egentligen kallas en warm spare eftersom den sitter där redo att användas men inte innehåller de data som krävs för att kunna användas omedelbart. En reservdisk som förvaras utanför chassit, en som kräver att en människa griper in och byter diskarna manuellt, skulle vara en cold spare. För att verkligen vara en hot spare borde en disk vara fylld med data och därmed vara en deltagande medlem av RAID-arrayen i någon kapacitet. Red Hat har en bra artikel om hur denna terminologi tillämpas på katastrofåterställningsplatser som referens. Denna åtskillnad är viktig eftersom det vi kallar en hot spare inte redan innehåller data och inte omedelbart träder in för att ersätta den trasiga disken, utan i stället träder in för att omedelbart påbörja processen att återställa den förlorade disken – en kritisk åtskillnad.
För att hålla begreppen tydliga kommer jag från och med nu att hänvisa till det som leverantörer kallar hot spares som “warm spares.” Detta kommer att bli begripligt inom kort.
Det finns två huvudsakliga betänkligheter med warm spares. Den första är warm spare-diskens verkningslösa natur i de flesta användningsfall och den andra är risken för “automatiserad arrayförstörelse.”
De flesta närmar sig warm spare-konceptet som ett sätt att mildra den höga risken för sekundärt diskhaveri på en paritets-RAID 5-array. RAID 5-arrayer skyddar endast mot haveri av en enda disk inom arrayen. När en enda disk väl har havererat lämnas arrayen utan någon form av paritet och varje ytterligare diskhaveri resulterar i total förlust av arrayen. RAID 5 väljs eftersom det är mycket billigt för den givna kapaciteten och offrar tillförlitlighet för att uppnå denna kostnadseffektivitet. Eftersom RAID 5 därmed är riskabelt i jämförelse med andra RAID-alternativ, såsom RAID 6 eller RAID 10, är det vanligt att implementera en warm spare för att minimera den tid som arrayen lämnas i ett degraderat tillstånd, så att arrayen kan börja resilvra sig själv så snabbt som möjligt.
Så slutsatsen här som är mer relevant är att warm spares generellt används som en buffert mot att använda mindre tillförlitliga RAID-arraytyper som en kostnadsbesparande åtgärd. Warm spares är dramatiskt vanligare i RAID 5-arrayer, följt av RAID 6-arrayer. Båda väljs framför RAID 10 på grund av kostnad per kapacitet, inte för tillförlitlighet eller prestanda. Det finns ett fall där idén med en warm spare verkligen är vettig för ökad tillförlitlighet, och det är i RAID 10 med en warm spare, men vi återkommer till det. Utanför det scenariot anser jag att warm spares är föga vettiga i den verkliga världen.
Vi börjar med att undersöka RAID 1 med en warm spare. RAID 1 består av två diskar, eller fler, i en spegel. Att lägga till en warm spare är trevligt på så sätt att om en av de speglade diskarna dör kommer warm spare-disken omedelbart att börja spegla den kvarvarande disken och du kommer att vara skyddad igen inom kort. Det är underbart. Förutom en mindre brist: i stället för att använda en warm spare kunde samma disk ha lagts till i RAID 1-arrayen hela tiden, där den skulle ha varit en tertiär spegel. I denna tertiära spegelkapacitet skulle disken ha bidragit till arrayens totala prestanda och gett en nästan femtioprocentig ökning av läsprestanda medan skrivprestandan förblir oförändrad, och gett omedelbart skydd i händelse av ett diskhaveri snarare än skydd “så snart den har speglats om.” I grund och botten skulle det ha varit en äkta “hot spare” snarare än en warm spare. Så utan att spendera ett öre mer skulle systemet ha haft bättre diskarrayprestanda och bättre tillförlitlighet, helt enkelt genom att ha den extra disken i en het “i arrayen”-kapacitet snarare än sittande varm och inaktiv i väntan på att katastrofen ska slå till.
Med RAID 5 ser vi en ännu mer dramatisk varning mot warm spare-konceptet, här där det är vanligare än någon annanstans. RAID 5 är RAID med enkel paritet med förmågan att, med hjälp av pariteten, återuppbygga vilken disk som helst i arrayen som havererar. Det är här de verkliga problemen börjar. Till skillnad från i RAID 1 där en omspeglingsoperation kan vara ganska snabb, har en RAID 5-resilver (återuppbyggnad) potential att ta ganska lång tid. Warm spare-disken kommer inte att hjälpa till att skydda arrayen förrän denna resilver-process slutförs framgångsrikt – detta är ofta många timmar och är lätt dagar och möjligen veckor eller månader beroende på arrayens storlek och hur hårt belastad arrayen är. Om vi tog samma warm spare-disk och i stället gav den uppdraget att vara en medlem av arrayen med en ytterligare paritetsstripe skulle vi uppnå RAID 6. Samma uppsättning diskar som vi har för RAID 5 plus warm spare skulle skapa en RAID 6-array med exakt samma kapacitet. Återigen, liksom RAID 1-exemplet ovan, skulle detta likna att ha en hot spare, där disken deltar i arrayen med levande data snarare än att sitta inaktiv i väntan på att en annan disk ska haverera innan den träder i kraft för att börja processen att ta över. I denna kapacitet degraderas arrayen till en RAID 5-motsvarighet i händelse av ett haveri men utan någon återuppbyggnadstid, så den ytterligare disken är användbar omedelbart snarare än först efter en möjligen mycket långdragen resilver-process. Så för samma pengar, samma kapacitet är valet att sätta upp diskarna i RAID 6 snarare än RAID 5 plus warm spare en fullständig vinst.
Vi kan fortsätta detta exempel med RAID 6 plus warm spare. Detta är lite mindre lätt att definiera eftersom det i de flesta RAID-system, förutom det något ovanliga RAIDZ3 från ZFS, inte finns något trippelparitetssystem tillgängligt ett steg ovanför RAID 6 (tänk dig om det fanns ett RAID 7, till exempel.) Om det gjorde det skulle exakt det argument som framförts för RAID 5 plus warm spare gälla för RAID 6 plus warm spare. I majoriteten av fallen måste RAID 6 med en warm spare rättfärdiga sig gentemot en RAID 10-array. RAID 10 är mer presterande och långt mer tillförlitligt än en RAID 6-array, men RAID 6 väljs generellt för att spara pengar i jämförelse med RAID 10. Men för att kompensera för RAID 6:s skörhet används warm spares ibland. I vissa fall, såsom en liten RAID 6-array med fem diskar plus en warm spare, är detta krona för krona likvärdigt med en RAID 10-array med sex diskar utan en warm spare. I större arrayer blir kostnadsfördelen med RAID 6 tydlig, men ju större kostnadsbesparingen är desto större är riskdifferensen, eftersom paritets-RAID-system ökar risken med arraystorleken mycket snabbare än vad spegelbaserade RAID-system som RAID 10 gör. Varje pengar som sparas i dag görs på bekostnad av risken för avbrott eller dataförlust i morgon.
Där en warm spare kommer till sin rätt effektivt är i en RAID 10-array där en warm spare-återuppbyggnad är en spegelåteruppbyggnad, som i RAID 1, vilken inte medför paritetsrisker, där det inte finns något logiskt utökat RAID-system ovanför RAID 10 från vilket vi försöker spara pengar genom att gå med ett skörare system. Här kan det vara vettigt att lägga till en warm spare för kritiska arrayer eftersom det inte finns något mer kostnadseffektivt sätt att vinna samma ytterligare tillförlitlighet. RAID 10 är dock så tillförlitligt utan en warm spare att varje verksamhet som överväger RAID 5 eller RAID 6 med en warm spare logiskt sett skulle stanna vid enkel RAID 10, eftersom de redan har överträffat den tillförlitlighet de övervägde att nöja sig med tidigare. Så endast verksamheter som inte överväger dessa skörare system och som söker det mest robusta möjliga alternativet skulle logiskt sett se RAID 10 plus warm spare som sin lösning.
Bara för teknisk noggrannhet: RAID 10 kan utökas för bättre läsprestanda och dramatisk förbättring av tillförlitligheten (men med en femtioprocentig kostnadsökning) genom att gå över till RAID 1-speglar med tre diskar i sin RAID 0-stripe i stället för standardmässiga RAID 1-speglar med två diskar, precis som vi visade i vårt RAID 1-exempel. Detta är en tillförlitlighetsnivå som sällan eftersträvas i den verkliga världen men som kan existera och är ett alternativ. Normalt begränsas detta av begränsningar i antalet diskar i fysiska arraychassin samt av att det konkurrerar dåligt mot att bygga en helt separat sekundär RAID 10-array i ett annat chassi och sedan spegla dessa på en hög nivå, vilket i praktiken skapar RAID 101 – vilket är det faktiska resultatet av vanliga, avancerade lagringsarrayklustrer i dag.
Vår andra betänklighet är den om “automatiserad arrayförstörelse.” Detta gäller endast paritets-RAID-scenarierna RAID 5 och RAID 6 (eller de sällsynta RAID 2, RAID 3, RAID 4 och RAIDZ3.) Med warm spare-konceptet är tanken att när en disk havererar byts warm spare-disken automatiskt och omedelbart in av arraykontrollern och processen att resilvra arrayen påbörjas omedelbart. Om resilvring vore en helt tillförlitlig process skulle detta uppenbarligen vara mycket välkommet. Verkligheten är, tyvärr, ganska annorlunda.
Under en resilver-process löper en paritets-RAID-array risk att Oåterställbara Läsfel (UREs) dyker upp. Om ett URE inträffar under en resilver av enkelparitets-RAID (det vill säga RAID 2 – 5) så misslyckas resilver-processen och arrayen går helt förlorad. Detta är kritiskt att förstå eftersom ingen ytterligare disk har havererat. Så om warm spare-disken inte hade funnits närvarande skulle resilvringen inte ha påbörjats och datan skulle fortfarande ha varit intakt och tillgänglig – bara inte lika snabbt som vanligt och med den lilla risken för sekundärt diskhaveri. URE-frekvenserna är mycket höga med dagens stora diskar, och med stora arrayer kan riskerna bli så höga att de går från “möjliga” till “förväntade” under en standardmässig resilver-operation.
Så i många fall kan warm spare-disken själv faktiskt vara utlösaren för dataförlust snarare än datans räddare som förväntat. En array som skulle ha överlevt kan förstöras av resilver-processen innan människan som hanterar den ens har larmats om att den första disken har havererat. Hade en människa varit inblandad kunde de, åtminstone, ha vidtagit åtgärden att göra en färsk säkerhetskopia av arrayen innan de drog igång resilvringen, i vetskap om att den senaste kopian av datan skulle vara tillgänglig i fall resilver-processen misslyckades. Det skulle också göra det möjligt för människan att schemalägga när resilvringen ska påbörjas, möjligen genom att vänta tills arbetsdagen är över eller helgen har börjat när arrayen är mindre benägen att uppleva tung belastning.
Dubbel- och trippelparitets-RAID (RAID 6 respektive RAIDZ3) delar URE-risker likaså eftersom även de bygger på paritet. De mildrar denna risk genom de ytterligare paritetsnivåerna och gör så framgångsrikt för det mesta. Risken existerar fortfarande, särskilt i mycket stora RAID 6-arrayer, men för de kommande flera åren förblir riskerna generellt ganska låga för majoriteten av lagringsarrayer fram till dess att långt större spindelbaserade lagringsmedier finns tillgängliga på marknaden.
Det största problemet med paritets-RAID och URE-risken är att drivkraften mot paritets-RAID (villigheten att möta ytterligare risker för dataintegritet för att sänka kostnaden) är samma drivkraft som introducerar förhöjd URE-risk (inköp av billigare, icke-enterprise SATA-hårddiskar.) Verksamheter som ställs inför paritets-RAID gör generellt så med stora, billiga SATA-diskar, vilket för samman två mycket farliga faktorer till en explosiv kombination. Att använda icke-paritets-RAID 1 eller RAID 10 kommer att eliminera problemet helt, och att använda mycket tillförlitliga enterprise-SAS-diskar kommer drastiskt att minska riskfaktorn med en storleksordning (inte ett uttryckssätt, det är faktiskt en förändring med en storleksordning.)
Dessutom är det under resilver-operationer möjligt att prestandan på paritetssystem degraderas så drastiskt att det är likvärdigt med ett långvarigt avbrott. Resilver-processen, särskilt på stora arrayer, kan vara så intensiv att slutanvändare inte kan skilja mellan en helt havererad array och en array som resilvrar. Faktum är att resilvring i sin extrem kan ta så lång tid och vara så störande att kostnaden för verksamheten kan bli högre än om arrayen helt enkelt hade havererat fullständigt och en återställning från säkerhetskopia hade gjorts i stället. Detta resilver-problem påverkar inte RAID 1 och RAID 10, återigen, eftersom de är speglade, inte paritets-, RAID-system och deras resilver-process är trivial och systemets prestandadegradering är minimal och kortvarig. I sin mest extrema form kan en paritetsresilver ta veckor eller månader, under vilken tid systemen beter sig som om de vore offline – och vid vilken punkt som helst under denna process finns potentialen för att de URE-fel som nämnts ovan uppstår, vilket skulle avsluta resilvringen och tvinga fram en återställning från säkerhetskopia ändå. (Typiska resilvringar tar inte veckor men tar väl många timmar, och att de tar dagar är inte alls ovanligt.)
Vår avslutande översikt kan brytas ned till följande (det konventionella begreppet “hot spare” används igen): RAID 10 utan en “hot spare” är nästan alltid ett bättre val än RAID 6 med en “hot spare.” RAID 6 utan en “hot spare” är alltid bättre än RAID 5 med en “hot spare.” RAID 1 med ytterligare spegelmedlem är alltid bättre än RAID 1 med en “hot spare.” Så oavsett vilken RAID-nivå med en hot spare du beslutar dig för, flytta helt enkelt upp en nivå i RAID-tillförlitlighet och släpp “hot spare”-disken för att maximera både prestanda och tillförlitlighet till samma eller nästan samma kostnad.
Warm spares, liksom paritets-RAID, hade sin tid i solen. Faktum är att det var när paritets-RAID fortfarande var vettigt för utbredd användning – när URE-fel var osannolika och diskkostnaderna var höga – som warm spare-diskar var vettiga likaså. De var väl ihopparade; när det ena var vettigt var ofta det andra det också. Det som ofta förbises är att i takt med att paritets-RAID, särskilt RAID 5, har förlorat sin effektivitet har det dragit med sig warm spare på oväntade sätt.
