- Door
- dr. Serge Gielkens
- geplaatst op
- 26 januari 2016 08:00 uur
Voor de rubriek Storage Stories beschouwen we deze deze keer ZFS. Dit is een software oplossing om diskbeheer, logical volume management en bestandssysteem onder één dak te brengen. Sun Microsystems heeft ZFS ontwikkeld en in 2005 uitgebracht als onderdeel van haar besturingssysteem OpenSolaris, de open source variant van Sun Solaris. Een jaar later in 2006 werd het toegevoegd aan Solaris 10. Sinds haar overname in 2010 van Sun biedt Oracle ZFS nu aan in haar storage oplossingen. Het open source project OpenSolaris is na de overname ter ziele gegaan maar de community zet de ontwikkeling voort. ZFS is daardoor nog steeds beschikbaar voor anderen en wordt inmiddels ook gebruikt door het besturingssysteem FreeBSD.
Zpool
ZFS werkt met devices onder de naam vdev. Een vdev kan een lokale disk, partitie of zelfs bestand zijn. In productie worden normaliter disks gebruikt als vdev. Oracle adviseert om partities en bestanden alleen te gebruiken voor testdoeleinden. Vdev’s kunnen ook genest worden.
Dergelijke vdev’s worden samengevoegd tot een storage pool. Dit is de zpool. Disks in een zpool mogen heterogeen zijn. Extra disks kunnen worden toegevoegd aan een bestaande zpool. Deze kunnen ook als hot spare geconfigureerd worden. In geval een nieuwe disk wordt toegevoegd, past ZFS dynamisch de stripe size aan om de throughput te verhogen.
RAID-Z regelt de redundantie. ZFS ondersteunt mirroring en redundancy op basis van parity. RAID-Z ondersteunt het uitvallen van maximaal drie disks. Hardware RAID wordt afgeraden daar dit interfereert met de eigen software implementatie van RAID-Z. Als een hardware RAID-controller toch aanwezig is, raadt Oracle aan om het in JBOD mode te zetten. RAID-Z heeft geen speciale hardware nodig. Consumer grade disks volstaan voor ZFS. Behalve redundantie over meerdere disks heen, kan ZFS ook kopieën van data in meerdere blocks op een disk opslaan.
ZFS gebruikt altijd RAM om te cachen. Daarnaast kan ook SSD gebruikt worden. ZFS ondersteunt zowel read als write cache. Voor ZFS is de write cache feitelijk niets anders dan een speciaal type vdev, namelijk een log device. Als er geen write cache gedefinieerd wordt, maken zpools altijd zelf een vdev van het type log device aan. Hierop schrijft ZFS als eerste de data weg.
ZFS file system
In de zpool maakt de beheerder bestandssystemen aan. Een ZFS file system groeit dynamisch naar gelang de behoefte. Elk bestandssysteem heeft toegang tot de volledige capaciteit van de zpool waartoe hij behoort. Na het aanmaken is een ZFS file system in eerste instantie alleen lokaal benaderbaar. Door het zetten van de juiste eigenschappen kan het bestandssysteem ook als shared filesystem benaderd worden. ZFS ondersteunt zowel NFS als CIFS.
Een beheerder kan in de zpool ook volumes aanmaken. ZFS noemt dit een zvol. Deze volumes verschaffen toegang op block niveau tot ZFS storage. Net als het ZFS file system maakt een zvol ook automatisch gebruik van de onderliggende ZFS functionaliteit zoals RAID-Z, snapshots en compressie. ZFS ondersteunt alleen het iSCSI protocol. Volumes worden typisch ingezet als backend storage voor VM’s.
In ZFS worden file systems en volumes aangeduid met de overkoepelende term dataset. Een ZFS dataset kan tussen verschillende zpools gemigreerd alsook synchroon gehouden worden. ZFS gebruikt daartoe haar snapshot functionaliteit. Door delta’s tussen verschillende snapshots te berekenen en die over te sturen, vindt synchronisatie op efficiënte wijze plaats. Zpools mogen op verschillende sites staan. Dit wordt gebruikt voor offsite back-ups en HA oplossingen. ZFS is echter geen geclusterd bestandssysteem. Elke ZFS server beheert enkel zijn eigen lokale storage.
ZFS gebruikt de snapshot technologie eveneens om datasets te clonen. Een dergelijke clone is niets anders dan een writable snapshot.
Data
Data-integriteit is ingebouwd om datacorruptie te voorkomen. Checksums worden berekend en in de pointers naar de datablocks opgeslagen. Dit wordt vervolgens recurrent gedaan voor de pointer blocks tot en met de root van het bestandssysteem. Bij het opvragen van data worden de checksums van al deze blocks geverifieerd. Als er een mismatch is tussen berekende en opgeslagen waarde, worden de redundante gegevens opgehaald om weer de juiste data te reconstrueren. Een beheerder kan de controle van de data-integriteit van een dataset ook handmatig opstarten. Daartoe dient de scrub tool die van een volledige dataset alle data en metadata controleert en repareert waar nodig.
ZFS comprimeert data eveneens. Dit gebeurt echter alleen voor nieuwe en gemodificeerde data. Oude data blijven ongecomprimeerd. Een alternatieve methode om efficiënt met storage om te gaan is deduplicatie. ZFS doet dit op block-niveau. In tegenstelling tot compressie is deduplicatie resource intensief. De systeembeheerder moet daarom zorgen voor ruim voldoende RAM geheugen.
Tot slot
ZFS speelt geen hele grote rol in de storage wereld. Sun leed tijdens haar bestaan al aan een steeds verder teruglopend marktaandeel. Ook Oracle lijkt vooralsnog ook het tij niet echt te kunnen keren met Solaris en ZFS. In de open source wereld is ZFS evenmin populair. Oplossingen die gebruik maken van Ceph bijvoorbeeld leunen of op traditionele bestandssystemen zoals XFS of richten hun pijlen meer op Btrfs. Het is duidelijk dat Oracle nog heel wat werk moet verzetten.