Ik zal een aantal scenario's beschrijven als je hoge beschikbaarheid wilt.
De eerste aanpak die je kunt kiezen is het gebruik van externe RAID. In de koerante hardware is de Infortrend DS-serie hier bijvoorbeeld goed voor geëigend. De externe RAID-eenheid is verbonden met twee servers en beide servers zien de RAID-array. Slechts één van de servers heeft het bestandssysteem gemount. Als je een klassiek bestandssysteem als Ext4 of XFS gebruikt moet je zelf zorgen dat dat veilig gaat. ZFS of BTRFS hebben ingebouwde bescherming tegen mounten en passen hun caching aan zodat geen data verloren gaat als een server uitvalt.
De HA-laag regel je met Pacemaker, zodat de actieve server de bestandsystemen mount en de services zoals IMAP op de actieve server laat draaien.
Een externe RAID-eenheid heeft geen single-point-of-failure en alle componenten (zoals RAID-controllers, ventilatoren, voedingen) zijn hotswap vervangbaar.
Het is ook mogelijk de software-RAID van ZFS te gebruiken, in plaats van een externe RAID-bak gebruik je dan een eenvoudige JBOD met redundante expanders. Beide servers zien alle schijven, ZFS zorgt voor RAID.
Een andere aanpak is het werken met DRDB. DRDB is een softwarelaag die data op twee servers repliceert. Dus twee servers met interne schijven en interne RAID-kaarten en DRBD zorgt dat data op beide servers wordt weggeschreven. De software ziet dan op beide servers een enkel gedeeld blockdevice en voor de software is de situatie dan niet anders dan bij een externe RAID-eenheid zoals RAID-bak van Infortrend. Tussen beide servers heb je een snelle verbinding nodig, ik zou ze met een infinibandkaart uitrusten zodat DRBD geen vertraging van het netwerk ondervindt.
Dan heb ik Ceph al even genoemd. Ceph maakt geen gebruik van RAID, maar van erasure-coding. Je kunt Ceph zien alsof het het netwerk als "RAID" gebruikt, je verdeelt je storage over veel lichte servers. Bijvoorbeeld 20 servers met elk een klein aantal schijven. Ceph is flexibel dus je bent niet gebonden aan bijvoorbeeld RAID6 waarbij je 2 schijven redundant hebt, maar kunt bijvoorbeeld kiezen voor 8+4, wat betekent dat een bestand over 12 servers wordt verdeeld, waarvan er maar 8 nodig zijn om het bestand te kunnen lezen. Valt een server uit, dan zal Ceph op zijn dooie gemak de redundantie herstellen: Met 19 servers zijn er immers nog steeds voldoende servers over om 8+4 te realiseren en omdat elk van de servers een deel van het rebuildwerk doet, heb je geen hoge rebuildtijden. Ceph hoeft alleen de daadwerkelijk gebruikte data te herstellen, niet zoals bij een RAID-array dat als een schijf van 20TB uitvalt ook 20TB herbouwd moet worden.
Dan heb ik GPFS genoemd. GPFS is niet goedkoop, maar dan heb je ook wat. GPFS is enorm uitgebreid en heeft alle hierboven genoemde technieken in zich. Het kan bijvoorbeeld overweg met externe RAID-machines van Infortrend, maar ook erasure-coding in Ceph-stijl realiseren en heeft nog eigen technieken als declustered RAID, een andere techniek om rebuildtijden te elimineren. GPFS werkt vanuit de client werkt met routes naar blockdevices: Als er een route, via het netwerk, of al dan niet redundante SAS-verbinding, of een ouderwets SAN, naar een schijf bestaat, dan zal GPFS die vinden en als een verbinding wegvalt, bijvoorbeeld doordat een server uitvalt, pakt het doodleuk een andere route zonder dat iemand er iets van merkt.
GPFS kan daar bovenop ook nog eens repliceren, dus als je twee kopieën van ieder bestand wilt hebben in je systeem, kwestie van instellen, of het kan integreren met Tivoli-storage manager met je backup e.d., of het kan geografische replicatie realiseren voor als je bang bent dat een F35 per abuis een bom op je rekencentrum laat vallen. Je kunt er millitaire betrouwbaarheid mee realiseren en ik heb zo'n enorm betrouwbaar systeem in het verleden mogen ontwerpen, was erg leuk en is goed gelukt.