Al geruime tijd verrichten we wat denkwerk rond “high availability”. Wanneer we kijken op applicatieniveau -denk “het terugsturen van een webpagina wanneer erom gevraagd wordt”- is dit allemaal niet extreem moeilijk. Er bestaan zelfs verschillende kant en klare oplossingen, en meestal bestaat meer dan één techniek om alles te balancen, clusteren of failover-en. Per applicatie zijn verschillende mogelijkheden, de één al mooier dan de andere, maar uiteindelijk kan je altijd wel iets maken dat redundant is en werkt.
Je blijft echter altijd met één groot probleem zitten: redundante opslag. Ik maak deze denkoefening nu al minstens 9 maand, en tot op heden ben ik er nog niet uitgeraakt wat het best is. Ofwel ga je op block-niveau gaan werken, en moet je kijken naar oplossingen als DRBD of iets dergelijks. Het enige wat hier mogelijk is, is failover (dus, omschakelen als de “hoofdserver” doodgevallen is), en wanneer je replicatie uitvalt, zit je met een block-device met daarop een mogelijks inconsistent filesysteem. Deze blockdevices kunnen geëxporteerd worden via verschillende technologieën, maar als het als block geëxporteerd is, moet een umount/detecteer ander device/chkfs/re-mount gebeuren. Hier heb ik reeds verschillende zaken getest (bvb iSCSI exports, via drbd gesynced, met HA, en dan portal failover of iets dergelijks voor het omschakelen). Heel het iSCSI gebeuren onder Linux kan nog wat stabiliteit en zo gebruiken, maar het is werkbaar als je er genoeg tijd in steekt om alles uit te vissen. LVM eronder, en je hebt een mooie schaalbare oplossing.
Wanneer je een filesysteem exporteert (smb/cifs, nfs…) kan je hier wat omheen werken, maar dan moet je je filesysteem syncroon houden, en dat is dan weer iets anders. GFS is blijkbaar één oplossing, maar daar heb ik al veel threads gezien met als onderwerp “horrible data corruption” of “where did my data go today?”. Ik heb het nog niet getest, maar het lijkt me dus onstabiel. Als mijn testmachines terug onder de levenden zijn, gooien we dat op de testbank. Verder zijn er ook zaken die met daemons werken, en files heen en terug syncroniseren (met rsync als onderliggende technologie). Dat heb ik dan wel al getest, en binnen de 5 minuten kreeg ik het stuk. Afgevoerd.
De enige oplossing die altijd terugkomt is NFS op een drbd gesyncd device. NFS heeft zijn nadelen, maar blijkbaar is het wel iets wat werkt. Je blijft echter zitten met het feit dat je FS corrupt kan zijn, als de replicatie op een slecht moment wegvalt. Je kan ook maar 2 storage devices gebruiken, en bvb geen 3 met load balancing, of “preferred device” wanneer je bvb je materiaal verdeelt over meerdere locaties en een applicatie bij voorkeur het “dichtste” device moet gebruiken.
Toevallig heb ik deze week heb ik wat zitten zoeken naar kant-en-klare NAS-distributies voor een klant, en vond ik OpenFiler en FreeNAS (naast een hoop andere rommel), en OpenFiler beweert een failover oplossing te hebben. Aangezien het een CentOS gebasseerde oplossing is, vermoed ik dat het terug GFS zal zijn. We gaan dat eens installeren en onderzoeken hoe ze het doen, en daar onze conclusies uit trekken.