15.11.2012 Aufrufe

Ulrich Gräf Senior SE / OS Ambassador Platform Technology ...

Ulrich Gräf Senior SE / OS Ambassador Platform Technology ...

Ulrich Gräf Senior SE / OS Ambassador Platform Technology ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

ZFS<br />

<strong>Ulrich</strong> <strong>Gräf</strong><br />

<strong>Senior</strong> <strong>SE</strong> / <strong>OS</strong> <strong>Ambassador</strong><br />

<strong>Platform</strong> <strong>Technology</strong><br />

- OpenSolaris, Solaris, Performance -<br />

Sun Microsystems Deutschland GmbH<br />

1


ZFS – Eine neue Generation<br />

• Daten-Integrität<br />

> Volume Manager ist integriert<br />

> Alle Blöcke mit Prüfsummen gesichert<br />

• Kapazität ist zukunftssicher<br />

> 128 Bit Filesystem<br />

> Alle Parameter automatisch anpassend<br />

• Einfachste Administration<br />

> Ein Filesystem mit einem Kommando<br />

• Performance durch Transaktionen<br />

Sun Confidential: Internal Only 2


Volmgr. + FS / ZFS:<br />

Posix-Interface:<br />

UFS:<br />

Bit-Optimierung<br />

Abstraktion<br />

Hiding<br />

Volume<br />

Filesystem:<br />

FS<br />

VM<br />

...<br />

File<br />

ZFS:<br />

Dir<br />

Dir<br />

Dir<br />

File<br />

File File<br />

Dir<br />

File<br />

File<br />

ZPL<br />

DMU<br />

SPA<br />

...<br />

Admin-Optimierung<br />

Prüfsummen<br />

Transaktionen<br />

Dynamic Striping<br />

Kompression<br />

Self-Healing<br />

HW-Optimierung<br />

Sun Confidential: Internal Only 3


Existierende Filesysteme<br />

• Datenkorruption ist möglich<br />

– Prüflesen direkt nach Schreiben (in Platten Firmware)<br />

– Volume Manager kennt nicht die Struktur der Daten<br />

=> Schreib-Optimierung unmöglich<br />

– Filesystem kennt nicht den Spiegel / das physikalische Layout<br />

=> Zugriff zu intaktem Spiegel nur manuell<br />

• Hoher Administrationsaufwand<br />

– Ein Filesystem erfordert (nacheinander!):<br />

– Partitionieren<br />

– Volume erzeugen (Wartezeit)<br />

– Filesystem erzeugen (Wartezeit)<br />

– vfstab Eintrag<br />

– dfstab Eintrag<br />

– grow/shrink ist zeitaufwendig<br />

Sun Confidential: Internal Only 4


Ziel der ZFS Entwicklung<br />

“End the Suffering”<br />

• Data Management<br />

–Soll einfach sein<br />

–Mächtige Kommandos haben<br />

–Ohne lange Wartezeiten oder Befehlsketten<br />

–Daten sollen inhärent sicher sein<br />

Sun Confidential: Internal Only 5


ZFS – wie Entwickeln?<br />

Es gibt keinen Weg vom jetzigen Modell: Volume Manager +<br />

Filesystem<br />

• 20 – 40 Jahre alte Annahmen stimmen nicht mehr, wie z.B.<br />

> Prüfsummen sind zu teuer (nicht mehr bei 64 Bit / >>1 Ghz )<br />

> Sparsame Metadaten (heute: Geschwindigkeit wichtiger)<br />

• Volume Manager sind aus der Not geboren<br />

> Flexiblere Verwaltung von Daten<br />

– Concat / Stripe / Mirror / Raid-5, Feingranulare Partitionierung<br />

> Aber:<br />

– Verhindern Optimierungen im Filesystem<br />

– Keine Integrität<br />

Diese Design-Entscheidungen enden in einer Sackgasse<br />

=> Neuentwicklung<br />

Sun Confidential: Internal Only 6


ZFS Design Prinzipien<br />

• Pooled Storage<br />

> Filesystem auf mehreren Disks<br />

> Hierarchische Aufteilung<br />

> Vereinfachung der Administration durch Vererbung<br />

• End-to-end Daten-Integrität<br />

> Prüfsummen auf jedem Block (heute machbar)<br />

> Automatische Korrektur durch Zugriff auf Spiegel / Raid-5 aus<br />

dem Filesystem<br />

• Transaktionen für jede Veränderung im Filesystem<br />

> fsck niemals notwendig<br />

> Jederzeit Konsistenzprüfung möglich (online!)<br />

> Erhöht die Schreib-Performance<br />

Sun Confidential: Internal Only 7


ZFS – Design Paradigmen<br />

• Elemente<br />

> Plattenpools<br />

> Volume Manager<br />

> Große Filesysteme<br />

> Transaktionen auf der Platte<br />

> Prüfsummen<br />

> Self-Healing<br />

> Adminstrative Vereinfachung durch Vererbung<br />

• Alles ist bisher schon mal dagewesen ...<br />

Allerdings: nicht in dieser Kombination!<br />

Sun Confidential: Internal Only 8


Warum gibt es Volumes (LUNs)?<br />

Vorher:<br />

Filesystem auf<br />

einer Platte<br />

oder Slice<br />

FS<br />

1G<br />

Disk<br />

• Kunden wollten kleinere und größere Filesysteme<br />

> Es erschien schwer die Filesysteme zu ändern<br />

> Man ging den (vermeintlich) leichteren Weg: Volume Manager<br />

• Probleme:<br />

> Filesystem kann nicht optimieren (parallel lesen/schreiben)<br />

> Filesystem kann den Spiegel nicht lesen<br />

> Volume darf Schreibreihenfolge nicht optimieren (Integrität)<br />

FS<br />

Volume<br />

(2G concat)<br />

Lower<br />

1G<br />

Upper<br />

1G<br />

Volume<br />

(2G stripe)<br />

Even<br />

1G<br />

FS FS<br />

Odd<br />

1G<br />

Volume<br />

(1G mirror)<br />

Left<br />

1G<br />

Right<br />

1G<br />

Sun Confidential: Internal Only 9


FS/Volume Modell vs. ZFS<br />

Traditionelle Volumes<br />

• Abstraktion: virtuelle Disk (fest)<br />

• Volume für jedes Filesystem<br />

• Grow/shrink nur koordiniert<br />

• Bandbreite / IOs aufgeteilt<br />

• Fragmentierung des freien Platzes<br />

FS<br />

Volume<br />

FS<br />

Volume<br />

ZFS Pooled Storage<br />

• Abstraktion: Datei (variabel)<br />

• Keine feste Platzeinteilung<br />

• Grow/shrink via Schreiben/Löschen<br />

• Volle Bandbreite / IOs verfügbar<br />

• Freier Platz wird geshart<br />

FS ZFS ZFS ZFS<br />

Volume<br />

Storage Pool<br />

Sun Confidential: Internal Only 10


FS/Volume Model vs. ZFS<br />

FS/Volume I/O Stack<br />

Block Device Interface<br />

• Schreib-Reihenfolge erzeugt<br />

quasi-Integrität<br />

• Stromausfall: Metadaten<br />

konsistent mittels fsck<br />

• Journaling<br />

(nur Metadaten)<br />

Block Device Interface<br />

• Muß so schreiben wie es vom<br />

FS kommt<br />

• Stromausfall: ggf. Spiegel<br />

ungleich<br />

• Langsam, da synchron<br />

FS<br />

Volume<br />

ZFS I/O Stack<br />

Object-basierte Transaktionen<br />

• Daten-Änderungen =><br />

Transaktionen<br />

• All-or-nothing!<br />

Transaction Group Commit<br />

• Daten-Änderung und zugehörige<br />

Metadaten =><br />

Transaktions-Gruppen<br />

• Commit mittels COW<br />

Transaction Group Batch I/O<br />

• Zusammenfassung +<br />

Optimierung<br />

• Stromausfall -> alter Zustand<br />

• Platten werden ausgenutzt<br />

ZFS<br />

DMU<br />

SPA<br />

Sun Confidential: Internal Only 11


ZFS Daten Integrität<br />

• Copy-On-Write<br />

> Daten werden niemals überschrieben (= Rücksetzen ist möglich)<br />

> Neuer Zustand wird in freien Blöcken vorbereitet<br />

• Transaktionen (ausschließlich)<br />

> Neue uberblock-Version -> neuer Zustand<br />

(128 zyklisch benutzte uberblocks, 4 Kopien in Header und Trailer)<br />

> Transaktionen umfassen auch die Daten im FS<br />

> Journaling nicht notwendig!<br />

• Prüfsummen auf jedem Block des Filesystems<br />

> Daten und Metadaten<br />

> Uberblock via Seriennummer und CRC<br />

> Filesystem Header<br />

Sun Confidential: Internal Only 12


Copy-On-Write Transaktionen<br />

1. Konsistenter Zustand 2. Dateien schreiben<br />

3. Zufügen Metadaten<br />

4. Schreiben uberblock (= Commit)<br />

Sun Confidential: Internal Only 13


ZFS Snapshot:<br />

• Verweis im uberblock zeigt auf Snapshot-Zustand<br />

• + Aufpassen beim Wegwerfen von Blöcken<br />

> used und referenced Blöcke<br />

Snapshot root<br />

Live root<br />

Sun Confidential: Internal Only 14


End-to-End Daten Integrität<br />

Disk Block Prüfsummen<br />

• Prüfsummen bei Datenblock<br />

• Auf Disks meist kurz (Fehler unentdeckt)<br />

• Einige Disk Fehler bleiben unentdeckt<br />

Data<br />

Checksum<br />

Data<br />

Checksum<br />

Nur Fehler auf Medium erkennbar<br />

✔ Bit rot<br />

✗ Phantom writes<br />

✗ Misdirected reads and writes<br />

✗ DMA parity errors<br />

✗ Driver bugs<br />

✗ Accidental overwrite<br />

ZFS Daten Integrität<br />

• Prüfsumme bei Adresse<br />

• Fehler auf beiden Spiegeln: unwahrscheinlich<br />

• Storage Pool ist ein<br />

validierener Baum<br />

Address<br />

Data Data<br />

ZFS validiert alle Blöcke<br />

✔ Bit rot<br />

✔ Phantom writes<br />

✔ Misdirected reads and writes<br />

✔ DMA parity errors<br />

✔ Driver bugs<br />

✔ Accidental overwrite<br />

Address<br />

Checksum Checksum<br />

Address<br />

Address<br />

Checksum Checksum<br />

Sun Confidential: Internal Only 15


Traditionelles Volume/FS Modell<br />

1. read liefert defekten Block 2. Falsche Metadaten:<br />

Filesystem hat Probleme,<br />

Absturz <strong>OS</strong> möglich<br />

Application<br />

FS<br />

xxVM mirror<br />

Application<br />

FS<br />

xxVM mirror<br />

3. Falsche Daten:<br />

Applikation bekommt Probleme<br />

oder rechnet falsch<br />

(ggf. unbemerkt!!!)<br />

Application<br />

FS<br />

xxVM mirror<br />

Sun Confidential: Internal Only 16


Self-Healing in ZFS<br />

1. read liefert defekten Block 2. ZFS berechnet Prüfsumme;<br />

da diese falsch ist,<br />

wird der Spiegel gelesen<br />

Application<br />

ZFS mirror<br />

(Metadaten sind also korrekt)<br />

Application<br />

ZFS mirror<br />

3. ZFS liefert korrekte Daten an<br />

die Applikation;<br />

UND korrigiert defekten Block!<br />

Application<br />

ZFS mirror<br />

Sun Confidential: Internal Only 17


Transaktionen + Self Healing vs. fsck<br />

Traditionell: fsck<br />

> Filesystem Code verläßt sich auf die Inhalte der Metadaten<br />

> Online Prüfung der Metadaten zu teuer (Prüfsumme fehlt)<br />

> Daher mount erst dann, wenn fsck ok ist<br />

(sonst Crash durch “system panic”)<br />

> Weiterhin:<br />

– Annahme: FS geht während Betrieb nicht kaputt (heute noch gültig?)<br />

– Online-Check nicht möglich!<br />

(Synchronisation ist im FS Code und Disk-Layout nicht vorgesehen)<br />

ZFS: Transaktionen<br />

> Erkennt online defekte Daten und Metadaten<br />

> Online check möglich (zpool scrub)<br />

> fsck (~= zpool scrub) vor mount unnötig<br />

Sun Confidential: Internal Only 18


Traditionell: RAID-4 and RAID-5<br />

• Daten-Blöcke + Parity Block (hier: 4+1)<br />

^ ^ ^ ^ = 0<br />

• Partial Stripe Writes (zB. bei Stromausfall)<br />

^ ^ ^ ^ 0<br />

– Daten des Stripe sind inkonsistent (write hole):<br />

– Batteriegepufferter und gespiegelter Cache notwendig!<br />

– Random writes: aufwendiger read-modify-write Zyklus<br />

• Stille Datenkorruption nur teilweise erkennbar<br />

– 8 Bit Prüfsumme der Platte -> nur 255 von 256 Fehlern erkennbar<br />

Sun Confidential: Internal Only 19


ZFS: RAID-Z<br />

• wie RAID-5, mit<br />

> Dynamische Größe des Stripe<br />

(4+1, wenn wenig Daten dann vielleicht 2+1)<br />

> Dynamische Block-Größe<br />

> Immer full-stripe write (kein read-modify-write): Performance<br />

(read-modify-write macht herkömmliches Raid-5 langsam)<br />

> Copy-On-Write commitet immer ganze Raid-Z Zeile<br />

– Raid-5 write hole entfällt<br />

– RAID-Z braucht keinen Cache mit Batterie<br />

• Datenkorruption wird wie bei ZFS mirror erkannt<br />

• Keine spezielle HW notwendig: “ZFS loves cheap disks”<br />

> Siehe Sun Fire X 4500 mit 24 TB disks und ZFS auf 4 Rack-Units<br />

• raidz-2: (seit 11/06) 2 Platten können ausfallen<br />

Sun Confidential: Internal Only 20


Disk Scrubbing<br />

• Alle Daten werden gelesen und ggf. korrigiert<br />

> mirror: alle Spiegel-Seiten<br />

> raidz: alle Daten und Parity-Blöcke<br />

> (raidz2 für doppelte Redundanz in Vorbereitung, -> OpenSolaris)<br />

• Daten Integrität erhalten für lange unbenutzte Daten<br />

> Wird auch für Wiederherstellung von Spiegeln benutzt<br />

(“re-silvering”)<br />

Sun Confidential: Internal Only 21


ZFS Skalierbarkeit<br />

• Immense Kapazität (128-bit)<br />

> Moore's Law: Bit 65 bis 2020 notwendig<br />

> Zetabyte = 70-bit (ISO Vorsilbe für 1 Milliarde TB)<br />

– tera = 10 12 ≈ 2 40<br />

heutige Disks<br />

– peta = 10 15 ≈ 2 50<br />

kleine Unternehmen<br />

– exa = 10 18 ≈ 2 60<br />

große Unternehmen<br />

– zeta = 10 21 ≈ 2 70<br />

größte ISO Vorsilbe<br />

– ??? = 10 36 ≈ 2 128 max Größe eines ZFS<br />

> Max Filegröße 2 63 -1 durch Posix API limitiert, bei Bedarf anpassbar<br />

• Metadaten: dynamisch, automatisch anpassend<br />

• Einstellungen: online durch Attribute<br />

• Parallele Nutzung aller Basis-Disks<br />

Sun Confidential: Internal Only 22


ZFS Performance<br />

• Copy-on-write Design<br />

> Geschriebene Daten werden neu allokiert<br />

– sonst sind Transaktionen nicht rücksetzbar<br />

> Viele kleine Random writes => wenige größere sequential writes<br />

• Multiple Blockgrößen, pipelined IO<br />

> 512 Byte ... 128 Kbyte Blöcke<br />

> Automatische Anpassung nach Datenaufkommen<br />

> Details:<br />

– Intelligente Algorithmen (slab allocator, gang chaining)<br />

– Scoreboard Pipeline (24 Stufen) mit I/O Abhängigkeits-Analyse<br />

– Parallelisierung über Disks<br />

– Priority, deadline scheduling, out-of-order issue, sorting, aggregation<br />

– Dynamic striping, multi-user Prefetch pro Datei<br />

Sun Confidential: Internal Only 23


Dynamic Striping<br />

• Automatische Migration von 4 auf 5 Spiegel<br />

• Hinzufügen von 5. Spiegel -> • write: 5-fach Stripe<br />

• existierende Daten bleiben bestehen<br />

ZFS ZFS ZFS<br />

Storage Pool<br />

1 2 3 4<br />

ZFS ZFS ZFS<br />

Storage Pool<br />

1 2 3 4 5<br />

Sun Confidential: Internal Only 24


Intelligent Prefetch<br />

• Multi User Prefetch<br />

– Für Streaming Service Provider<br />

– Length & Stride Erkennung<br />

– Volume/FS Modell:<br />

The Matrix (2 hours, 16 minutes)<br />

Jeff 0:07 Bill 0:33 Matt 1:42<br />

– Prefetch meist nur auf Volume<br />

– ggf konkurrierende Mechanismen auch mit<br />

Storage Subsystemen<br />

The Matrix<br />

(10M rows,<br />

10M columns)<br />

Sun Confidential: Internal Only 25


ZFS Security Features<br />

• ACLs wie bei NFSv4 und Windows NT-style<br />

– Allow/deny mit Vererbung<br />

• Daten-Authentifizierung mittels Prüfsummen<br />

– Benutzer-definierbarer Algorithmus (auch SHA-256)<br />

– Daten können nur schwer verfälscht werden<br />

– uberblock Prüfsumme ist die Signatur für den gesamten Pool<br />

• Encryption (future)<br />

– Wichtig für mobile Geräte und zugängliche Platten<br />

– Auswählbarer Algorithmus aus Solaris Security Framework<br />

• Sicheres Löschen (future)<br />

– Freigegebene Blöcke werden gelöscht<br />

Sun Confidential: Internal Only 26


ZFS Access Control Lists (≠ UFS ACLs)<br />

siehe chmod(1): chmod (options) A file...<br />

• Subjekte (Für wen?)<br />

> owner@, group@, everyone@ (wie traditionell)<br />

> user:, group: (andere User und Gruppen)<br />

• Rechte (Worum geht es?)<br />

> read/write/append data, execute<br />

> read/write attributes, read/write extended attributes, read/write acl<br />

> list/add directory, add/delete file, delete child<br />

> write owner, synchronize<br />

• Vererbung (Weitergabe der Rechte)<br />

> file_inherit, dir_inherit, inherit_only, no_propagate<br />

• Allow/Deny<br />

> Recht explizit erlaubt oder Recht explizit verboten<br />

Sun Confidential: Internal Only 27


ZFS hot spare / hot space<br />

Solaris 10 11/06:<br />

> hot spare: extra hotspare Disks für einen oder mehrere Zpools,<br />

die automatisch beim Ausfall einer Disk übernehmen<br />

Entwicklungsprojekt:<br />

> hot space: Nutzung von noch freiem Platz auf der anderen<br />

Spiegelseite, statt dediziertem hot spare<br />

Sun Confidential: Internal Only 28


ZFS ab Solaris 10 10/08<br />

• ZFS Boot Support<br />

> Booten von ZFS (rootpool)<br />

> ZFS Root installlierbar<br />

– Via Text Install (keine vollgraphische Installation)<br />

– Jumpstart (auch Platteneinteilung)<br />

– Fehler bein Installation von flar, WanBoot (Bug 6744320)<br />

– Keine NFS Installation ohne Jumpstart<br />

• Zonensupport auf ZFS<br />

• Live Upgrade<br />

> Mit ZFS Root als clone im rootpool<br />

> Mit Zonen nur bei bestimmten Konstellationen<br />

(Patch, Update 7)<br />

Sun Confidential: Internal Only 29


ZFS ab Solaris 10 10/08<br />

• ZFS Delegation an User (Rollen)<br />

> Wie bisher bei Delegation an Zone<br />

> Zusätzlich Einschränkung der Operationen möglich<br />

> z.B. zfs allow snapshot@tank/ulrich<br />

• Dediziertes Logging Device definierbar<br />

> z.B. für schnelle Platten oder SSD<br />

> z.B. zpool add log mirror disk7 disk8<br />

• Dediziertes Cache Device vorgesehen (disabled)<br />

> Ggf. wenn grosse SSDs verfügbar sind<br />

• ZFS Hotplug Support<br />

> USB-Stick, Hotplug Platten, SAN<br />

Sun Confidential: Internal Only 30


ZFS ab Solaris 10 10/08<br />

• ZFS Kompression mit gzip-1 ... gzip-9<br />

> gzip-1 ist besser als lzjb und noch schnell<br />

• Spiegelung auf einer Platte<br />

> zfs set copies=2 tank/ulrich<br />

> Daten werden doppelt auf einer Platte abgelegt<br />

• Kommando-Kosmetik<br />

> ZFS create/clone mit -p (Pfadelemente werden gemacht)<br />

> ZFS rename ist rekursiv (ganzer ZFS Baum umbenennbar)<br />

• Misc<br />

> ZFS Upgrade auf neues Pool Format (nur aufwärts)<br />

> Mehr ZFS history<br />

Sun Confidential: Internal Only 31


ZFS: ... und was ist mit Linux btrfs<br />

• Inittiert von Oracle,<br />

> Jetzt OpenSource Projekt<br />

> Oracle Beteiligung heruntergefahren (größer als gedacht???)<br />

> User-Eigenschaften von ZFS ... ein bisschen umlackiert<br />

• Größte Unterschiede<br />

> Arbeitet mit Volume-Manager nur zusammen<br />

– keine Integration, man will die Projekte nicht verärgern<br />

– bisher kein Self Healing<br />

> Snapshots sind direkt writable<br />

– Kein genauer Stand<br />

– SOX Problematik<br />

Sun Confidential: Internal Only 32


ZFS Administration per Web<br />

Graphisches User Interface mitgeliefert.<br />

Einschalten Webserver bei Boot:<br />

> /usr/sbin/smcwebserver enable<br />

> /usr/sbin/smcwebserver start<br />

Webserver ist erreichbar unter<br />

https://localhost:6789/zfs<br />

Sun Confidential: Internal Only 33


ZFS Test Methode<br />

• ZFS kann auch im User Kontext laufen<br />

> ztest arbeitet parallel:<br />

– read, write, create, delete Dateien und Directories<br />

– create, destroy von ZFS und ZPOOls<br />

– load auf Filesystem mit Umschalten Kompression<br />

– Umschalten Prüfsummen-Algorithmus unter Last<br />

– Änderungen der Devices unter Last<br />

– Änderung IO Caching und Scheduling Policies unter Last<br />

– Schreiben von Random Daten auf eine Seite des Spiegels/RAIDZ<br />

– Strom-Ausfall Simulation an zufälligen Stellen im ZFS Betrieb<br />

– Überprüfung des Datenzustands<br />

> ZFS hat einige Millionen Crashes ohne Datenverlust<br />

überstanden<br />

> ztest läuft jede Nacht auf dem aktuellen nightly build<br />

Sun Confidential: Internal Only 34


ZFS Administration<br />

• Pooled storage<br />

> Wie Volume Gruppen / Disk Gruppen<br />

> Nur Filesysteme, Volumes entfallen<br />

> Platz wird geshart benutzt, keine Fragmentierung mehr<br />

• Hierarchische Filesysteme<br />

> Vererbung von Properties<br />

– Policies einzeln oder für Hierarchie-Ebenen setzbar<br />

– ZFS ist zentraler Konfigurationspunkt<br />

– Mount-Point, NFS-Share, Quota, Reservierung, Compression, ...<br />

> Filesysteme erzeugen ist schnell<br />

• Online everything<br />

Sun Confidential: Internal Only 35


Zpool Kommandos<br />

• zpool create Erzeugen eines Zpool und ZFS<br />

• zpool add Vergrößern eines Zpool<br />

• zpool destroy Löschen eines Zpool<br />

• zpool export Zpool exportieren<br />

• zpool import Zpool importieren<br />

(Auswahl, Umbenennung)<br />

Ein Zpool ist immer auch ein ZFS.<br />

Sun Confidential: Internal Only 36


ZFS Kommandos<br />

• zfs create Erzeugen ZFS (Hierarchie)<br />

• zfs create -V Erzeugen Zvol (~raw device)<br />

• zfs set Verändern von Attributen<br />

• zfs snapshot Snapshot erzeugen<br />

• zfs clone Schreibbare Kopie eines Snapshot<br />

• zfs rollback Zurücksetzen auf Snapshot Stand<br />

• zfs send ZFS Snapshot serialisieren<br />

• zfs receive Serielle Form als ZFS erzeugen<br />

Nur das ZFS in der Wurzel der Hierarchie ist auch ein Zpool.<br />

Sun Confidential: Internal Only 37


ZFS: neu in Solaris 10 11/06<br />

• Support für Sun Cluster 3.2 (als lokales Filesystem)<br />

• Snapshots rekursiv (alle abhängigen Filesysteme)<br />

• double parity:<br />

> raidz2: 2 Platten können ausfallen<br />

• hot spares:<br />

> manueller und/oder automatischer Ersatz defekter Platten<br />

• Verwaltung<br />

> zfs promote (clone in Filesystem umwandeln)<br />

• Neues on-disk Format<br />

> Notwendig für Performance und für zfs promote<br />

> Kommmando: zpool upgrade<br />

Sun Confidential: Internal Only 38


ZFS in Solaris 10 8/07 (Solaris 10 U4)<br />

• ZFS Kommando Historie (zpool history)<br />

• ZFS Volumes können iSCSI Targets sein<br />

• ZFS Properties wurden erweitert (User Properties)<br />

• ZFS Kommando Pflege<br />

• /etc/system Einstellungen für Tuning<br />

• Branded zoneadm clone nutzt zfs clone<br />

Sun Confidential: Internal Only 39


ZFS Solaris Ausblick<br />

• Solaris 10 U5 (Mitte 2008)<br />

> ZFS Volumes als Devices für Ldoms<br />

• Solaris 10 U6 (2008/2009)<br />

> ZFS User Delegation<br />

> ZFS mehr History (delegierte Aktionen)<br />

> ZFS boot<br />

> ZFS reduce (?)<br />

Sun Confidential: Internal Only 40


ZFS Serialisierung<br />

• Serielle Repräsentation eines ZFS Snapshots<br />

> Nutzung für Backup und Restore (Snapshot: fester Zustand)<br />

> Bewegen eines Filesystems zwischen Systemen oder Disks<br />

> Inkrementelle Serialisierung (Unterschiede zwischen Snapshots)<br />

• Full backup<br />

# zfs send tank/fs@A >/backup/A<br />

• Incremental backup<br />

# zfs send -i tank/fs@A tank/fs@B >/backup/B-A<br />

• Remote replication: send incremental once per minute<br />

# zfs send -i tank/fs@11:31 tank/fs@11:32 |<br />

ssh host zfs receive -d /tank/fs<br />

Sun Confidential: Internal Only 41


ZFS Kommando Historie (S10 8/07)<br />

• Strukturverändernde Operationen werden im Zpool<br />

mitgeschrieben<br />

# zpool history<br />

History for 'tank':<br />

2007-10-26.18:45:22 zpool create -f -m none tank c0t1d0s6<br />

2007-10-26.18:46:39 zfs create -o mountpoint=/zone tank/zone<br />

2008-01-11.14:46:22 zfs create tank/test<br />

Sun Confidential: Internal Only 42


ZFS Properties allgemein (S10 8/07)<br />

• User-Attribute<br />

> selbst definierbar<br />

> Property Name muss : (Doppelpunkt) enthalten<br />

# zfs set fs:owner="<strong>Ulrich</strong> Graef" tank/test<br />

# zfs get fs:owner tank/test<br />

NAME PROPERTY VALUE SOURCE<br />

tank/test fs:owner <strong>Ulrich</strong> Graef local<br />

Sun Confidential: Internal Only 43


Solaris 10 10/08: ZFS Boot<br />

• ZFS Boot Support<br />

> Booten von ZFS (root pool)<br />

> Text-Install für ZFS root<br />

> Jumpstart für ZFS root<br />

> Live Upgrade von UFS auf ZFS root<br />

> Live Upgrade auf anderen root pool<br />

• Rollback ohne umount (auch f. Root!)<br />

Sun Confidential: Internal Only 44


Solaris 10 10/08: ZFS<br />

• ZFS send / receive<br />

> inkrementelles send in einen Ziel snapshot<br />

> inkrementelles send in einen Clone<br />

> rekursives send eines ZFS Baums<br />

> Damit: einfache Replikation eines ZFS Baums<br />

• ZFS quotas / reservations nur für filesysteme<br />

> snapshots und clones zählen nicht mit<br />

• ZFS pool Properties<br />

> Kommando: zpool get / set<br />

> Property: cachefile (f. import / export)<br />

> Property: failmode (Verhalten bei Device Fehlern)<br />

Sun Confidential: Internal Only 45


Solaris 10 10/08: ZFS<br />

• ZFS delegation<br />

> Delegation von ZFS Filesystemen an User / Rollen<br />

> Eingeschränkte Rechte möglich<br />

• ZFS history wurde erweitert<br />

> Name des Users<br />

• Dediziertes Logging Device definierbar<br />

> Interessant für Flash-Devices<br />

• ZFS create / clone / rename mit -p<br />

• ZFS hotplug support<br />

> USB-Stick, hotplug Platten<br />

Sun Confidential: Internal Only 46


Solaris 10 10/08: ZFS<br />

• ZFS rename geht jetzt auch rekursiv<br />

• ZFS Kompression nun auch mit gzip (-1 ... -9)<br />

• ZFS mit multiplen Kopien auf einer Disk<br />

> = Spiegelung in einer Platte<br />

> zfs set copies=2 ....<br />

• ZFS Upgrade<br />

> Upgrade existierender ZFS Filesysteme möglich<br />

• Zone kann auf ZFS liegen<br />

Sun Confidential: Internal Only 47


ZFS in OpenSolaris<br />

• CIFS Integration<br />

> SMB Service im Kernel analog zu NFS<br />

> Samba für andere Dienste noch notwendig<br />

> Einfach: zfs set sharecifs=yes ...<br />

> Kommt erst ins Solaris nach Solaris 10<br />

• OpenSolaris Developer Preview (Project Indiana)<br />

> ZFS root Filesystem<br />

> Rollback mit ZFS snapshot (pkg)<br />

Sun Confidential: Internal Only 48


Solaris als Storage Plattform<br />

Solaris besitzt nun die Basis-Technologien<br />

• Datenverwaltung<br />

> ZFS Filesysteme<br />

> ZFS Volumes<br />

• Netzwerk Services<br />

> NFSv3 und NFSv4<br />

> iSCSI Target (Server für iSCSI Volumes)<br />

> Samba<br />

> CIFS im Kernel (Samba Fileservice, nur OpenSolaris)<br />

> Active Directory Nameservice Client<br />

Sun Confidential: Internal Only 49


Projekt NAS 2.0: Storage Appliance<br />

• Basis: OpenSolaris (gestrippt)<br />

• Verwaltung der Daten mit ZFS<br />

• Netzwerk Services von Solaris<br />

• Verwaltung und Monitoring<br />

> Project Fishworks<br />

(Bryan Cantrill, natürlich mit DTrace...)<br />

Sun Confidential: Internal Only 50


ZFS: Erzeugen<br />

• Das einfachste ZFS Filesystem<br />

# zpool create tank c1t0d0<br />

> Erzeugt einen zpool namens tank auf der Platte c1t0d0<br />

(Inklusive Erzeugen eines EFI-Labels auf der Platte)<br />

> Erzeugt ein Filesystem des gleichen Namens<br />

> Mounted das Filesystem unter /tank<br />

> Merkt sich die Einstellung für Mount nach Reboot<br />

Sun Confidential: Internal Only 51


ZFS: Erzeugen (2)<br />

• Gespiegelter zpool mit Filesystem<br />

# zpool create tank mirror c0t0d0 c1t0d0<br />

• Hierarchisch untergeordnetes Filesystem mit Mountpoint<br />

# zfs create tank/home<br />

# zfs set mountpoint=/export/home tank/home<br />

• Home Directories (für das ZFS Team)<br />

Automatisch unter /export/home/{ahrens,bonwick,billm} durch Vererbung<br />

# zfs create tank/home/ahrens<br />

# zfs create tank/home/bonwick<br />

# zfs create tank/home/billm<br />

• Vergrößern des zpool<br />

# zpool add tank mirror c2t0d0 c3t0d0<br />

Sun Confidential: Internal Only 52


ZFS Properties<br />

• NFS-export aller Directories<br />

# zfs set sharenfs=rw tank/home<br />

• Kompression (gesamter zpool)<br />

# zfs set compression=on tank<br />

• Quota (Limit nach oben)<br />

# zfs set quota=10g tank/home/eschrock<br />

• Reservation (garantierter Platz)<br />

# zfs set reservation=20g tank/home/tabriz<br />

Sun Confidential: Internal Only 53


ZFS Snapshots<br />

• Snapshot ist read/only (sofort und beliebig viele)<br />

> quasi: Kopie des uberblock<br />

– Platz wird nur für die Unterschiede gebraucht<br />

– Snapshot optional sichtbar in .zfs/snapshot des Filesystems<br />

– Benutzer können selbst Zugriff auf alten Stand nehmen<br />

• Snapshot erzeugen<br />

# zfs snapshot tank/home/joeuser@tuesday<br />

• Rollback: Filesystem zurück auf alten Stand<br />

# zfs rollback tank/home/joeuser@monday<br />

• Zugriff auf alte Version via Filesystem<br />

$ cat ~joeuser/.zfs/snapshot/wednesday/foo.c<br />

Sun Confidential: Internal Only 54


ZFS Clones<br />

• Clone ist eine schreibbare Version des Snapshot<br />

> Sofort und beliebig viele<br />

> Mittel für Varianten eines FS<br />

• Erzeugen eines Clone<br />

# zfs clone tank/solaris@monday tank/ws/lori/fix<br />

Clone ist abhänging vom Snapshot<br />

• “Befördern” eines Clone zum unabhängingen Filesystem<br />

# zfs promote tank/ws/lori/fix<br />

Der Snapshot kann nun gelöscht werden<br />

Sun Confidential: Internal Only 55


ZFS Serialisierung<br />

• Serielle Repräsentation eines ZFS Snapshots<br />

> Nutzung für Backup und Restore (Snapshot: fester Zustand)<br />

> Bewegen eines Filesystems zwischen Systemen oder Disks<br />

> Inkrementelle Serialisierung (Unterschiede zwischen Snapshots)<br />

• Full backup<br />

# zfs send tank/fs@A >/backup/A<br />

• Incremental backup<br />

# zfs send -i tank/fs@A tank/fs@B >/backup/B-A<br />

• Remote replication: send incremental once per minute<br />

# zfs send -i tank/fs@11:31 tank/fs@11:32 |<br />

ssh host zfs receive -d /tank/fs<br />

Sun Confidential: Internal Only 56


ZFS Daten Migration<br />

• Endian neutrales on-disk format<br />

– Strukturen enthalten endianness, ZFS interpretiert beide<br />

– ZFS schreibt in der endianess des Hosts (kein Verlust)<br />

• ZFS enthält alle Informationen des Data Management<br />

– Label, Device Pfade, Striping, Mount-Point, NFS-Share<br />

– Ein integrierter Punkt zur Administration<br />

– Platten werden an anderen Stellen erkannt (auch als Kopien)<br />

• Export zpool<br />

old# zpool export tank<br />

• Import nach Umbau der Platten<br />

new# zpool import tank<br />

Sun Confidential: Internal Only 57


ZFS: Self Healing in Praxis<br />

• Gespiegelter ZFS auf Dateien unter /test<br />

# dd if=/dev/zero of=/tmp/d1 bs=1024 count=102400<br />

# dd if=/dev/zero of=/tmp/d2 bs=1024 count=102400<br />

# lofiadm -a /tmp/d1<br />

# lofiadm -a /tmp/d2<br />

# zpool create test mirror /dev/lofi/3 /dev/lofi/4<br />

# ### hier richtige lofi Nummern verwenden!<br />

• Parallel: Störfeuer und Datei-Operationen<br />

# cd /test<br />

# dd if=/dev/urandom of=/dev/lofi/3 bs=1024 count=102400 & \<br />

> ( cd /; tar cf – etc ) | tar xf -<br />

Sun Confidential: Internal Only 58


ZFS: Self Healing in Praxis<br />

• Inhalt prüfen; ZFS wiederherstellen<br />

# zpool status # ein paar Fehler<br />

# zpool unmount test # Cache im <strong>OS</strong> löschen<br />

# zpool mount test<br />

# tar cvf /tmp/test.tar /test # Filesystem ist ok<br />

# zpool status # Fehler beheben<br />

# zpool scrub test<br />

# zpool status<br />

Sun Confidential: Internal Only 59


ZFS Kommando Historie (S10 8/07)<br />

• Strukturverändernde Operationen werden im Zpool<br />

mitgeschrieben<br />

# zpool history<br />

History for 'tank':<br />

2007-10-26.18:45:22 zpool create -f -m none tank c0t1d0s6<br />

2007-10-26.18:46:39 zfs create -o mountpoint=/zone tank/zone<br />

2008-01-11.14:46:22 zfs create tank/test<br />

Sun Confidential: Internal Only 60


ZFS Volumes als iSCSI Targets (S10 8/07)<br />

• Ab Solaris 10 8/07 iSCSI Target Support<br />

> “Backing Store”: Dateien, Raw-Devices<br />

> Auch: ZFS Volumes<br />

• Administration integriert in ZFS Tools<br />

# zfs create -V 2g tank/volumes/v2 # Volume erzeugen<br />

# zfs set shareiscsi=on tank/volumes/v2 # Freigabe<br />

# Fertig!<br />

# iscsitadm list target<br />

Target: tank/volumes/v2<br />

iSCSI Name: iqn.1986-03.com.sun:02:984fe301-c412-ccc1-...<br />

Connections: 0<br />

Sun Confidential: Internal Only 61


ZFS Properties: xattr (S10 8/07)<br />

• xattr Extended Attribute ein/aus<br />

> Extended Attributes: Datei pro Attribut<br />

> Linux hat 2kByte für alle extended Attribute<br />

> Implementiert durch verstecktes Verzeichnis<br />

> Siehe<br />

– Kommando: runat(1)<br />

– Systemcall: openat(1)<br />

Sun Confidential: Internal Only 62


ZFS Properties: canmount (S10 8/07)<br />

• canmount Mountpoint ein/aus<br />

> Deaktivieren Mounten ohne Löschen von mountpoint<br />

# zfs get canmount,mountpoint tank/test<br />

NAME PROPERTY VALUE SOURCE<br />

tank/test canmount on default<br />

tank/test mountpoint /mnt local<br />

Sun Confidential: Internal Only 63


ZFS Properties allgemein (S10 8/07)<br />

• User-Attribute<br />

> selbst definierbar<br />

> Property Name muss : (Doppelpunkt) enthalten<br />

# zfs set fs:owner="<strong>Ulrich</strong> Graef" tank/test<br />

# zfs get fs:owner tank/test<br />

NAME PROPERTY VALUE SOURCE<br />

tank/test fs:owner <strong>Ulrich</strong> Graef local<br />

Sun Confidential: Internal Only 64


ZFS Properties initial setzen (S10 8/07)<br />

• Setzen der Properties bei ZFS create<br />

> -o =<br />

> mehrfach ist erlaubt<br />

# zfs create -o mountpoint=/mnt \<br />

-o compression=on \<br />

-o sharenfs=rw tank/test2<br />

# zfs get mountpoint,compression,sharenfs tank/test2<br />

NAME PROPERTY VALUE SOURCE<br />

tank/test2 mountpoint /mnt local<br />

tank/test2 compression on local<br />

tank/test2 sharenfs rw local<br />

Sun Confidential: Internal Only 65


ZFS Kommando Pflege (S10 8/07)<br />

• zfs status<br />

> Zeigt Dateinamen statt inodes bei defekten Dateien<br />

• zfs get<br />

> Ohne Zpool/ZFS Angabe werden alle angezeigt<br />

• zfs receive -F<br />

> Setzt das Ziel-Filesystem auf letzten Snapshot zurück<br />

Sun Confidential: Internal Only 66


ZFS und Zonen<br />

Zone A Zone B Zone C<br />

tank/a tank/b1 tank/b2 tank/c<br />

tank<br />

Global Zone<br />

Sun Confidential: Internal Only 67


zpool Object-Based Storage<br />

• DMU ist ein Transaktionaler Objekt Speicher<br />

– Filesysteme<br />

– Databanken<br />

– Swap Space<br />

– Volume Emulation<br />

– ???<br />

ZFS P<strong>OS</strong>IX<br />

Layer<br />

NFS<br />

Database<br />

App<br />

Data Management Unit (DMU)<br />

Storage Pool Allocator (SPA)<br />

UFS iSCSI Raw<br />

Swap<br />

ZFS Volume Emulator (zvol)<br />

Sun Confidential: Internal Only 68


ZFS Vergleich: Allgemeines<br />

Legende Farben: traditionell besser<br />

optimal<br />

UFS (+ SVM) VxFS (+ VxVM) ZFS<br />

Größe 16 TB = 2<br />

online Attribute<br />

44 Byte 8 EB = 263 Byte 16 EB = 264 Byte<br />

interne Größe 16 TB = 244 Byte 8 EB = 263 Byte 2128 Byte<br />

Transaktionen nein nein ja<br />

Datenblock Schutz nein nein ja<br />

fsck / Konsistenzprüfung offline (fsck) offline (fsck) online (zpool scrub)<br />

I/O Optimierung einige Optionen viele Optionen<br />

veraltet: c/t/s Mod. 24-stufige Pipeline<br />

Hierarchische Administration nein (nur VM) nein (nur VM) ja<br />

Filesystem – Vergrößerung ja (Volume + FS) ja (Volume + FS) ja (zpool Attribut)<br />

Filesystem – Verkleinerung nein ja (FS + Volume) ja (zpool Attribut)<br />

Pool – Verkleinerung ja ja geplant für U8<br />

Ersetzen von Platten im Pool ja ja ja (auch größer)<br />

Filesystem – Snapshots ja (zus. Platz) ja ja (in Nullzeit)<br />

Filesystem – Clones nein nein ja<br />

Verzeichnis-Ops in konstanter Zeit nein nein ja<br />

Filesystem auf mehreren Volumes nein ja (MDS, MVS) ja (FS im zpool)<br />

Sun Confidential: Internal Only 69


ZFS Vergleich: Details<br />

UFS (+ SVM) VxFS (+ VxVM) ZFS<br />

Konfiguration im <strong>OS</strong> vfstab, dfstab vfstab, dfstab integriert<br />

Fragmentierung freier Platz pro Volume pro Volume Platz ist shared<br />

Online Mod. Filesystem Parameter wenige einige alle<br />

Pool auf Platten ja ja ja<br />

Pool auf Partitionen ja nicht supportet ja<br />

Pool auf Dateien ja (lofiadm) ja (lofiadm) ja<br />

Disk Label Schutz nein nein yes (nur EFI label)<br />

Benutzbar f. root Filesystem ja nein ja (S10 10/08)<br />

User Quota<br />

ja ja ja (m. FS pro User)<br />

Filesystem Quota fest (Größe Volume) fest (Größe Volume) Online änderbar<br />

Range Locks in Dateien nein nein ja<br />

Kompression nein nein ja<br />

Serialisierung f. Backup etc. ja (ufsdump) ja (vxfsdump) ja (*zfs send)<br />

Inkrementelle Serialisierung ja (ufsdump -N) nein ja (zfs send -i)<br />

Rollback in Nullzeit nein nein ja<br />

Pool Export / Import<br />

ja (metaset) ja (diskgroup) ja (zpool)<br />

Little / Big Endian Unabhängigkeit nein nein ja<br />

Extended Attribute<br />

ja nein ja<br />

Delegation FS an Zonen nein nein ja<br />

Sun Confidential: Internal Only 70


ZFS Vergleich: Zuverlässigkeit<br />

UFS (+ SVM) VxFS (+ VxVM) ZFS<br />

Transaktionen nein nein immer<br />

Prüfsummen im Filesystem nein nein ja<br />

Entdecken v. Daten-Fehlern nein nein ja<br />

fsck ja ja nicht notwendig<br />

Online Integritätsprüfung nicht möglich nicht möglich ja (zpool scrub)<br />

Fehler in den Metadaten System panic System panic online Reparatur<br />

Fehler in den Daten wrong results wrong results online Reparatur<br />

Fehler im Disk Label kein Zugriff kein Zugriff<br />

online Rep. (EFI)<br />

Online Reparatur mit Spiegel no<br />

nein ja<br />

Online Reparatur mit Raid-5/-Z<br />

Software RAID-5 “write hole”<br />

nein nein ja<br />

ja nein, ist langsam m. nein<br />

dirty region logging<br />

Scrubbing<br />

nein nein ja<br />

Hot Spare Mechanismus ja ja ja (seit S10 11/06)<br />

Überlebt Datenkorruption<br />

(dd von Zufallsdaten auf Spiegel)<br />

nein nein ja<br />

Sun Confidential: Internal Only 71


ZFS Vergleich: Performance<br />

Striping<br />

UFS (+ SVM) VxFS (+ VxVM) ZFS<br />

Daten Layout statisch bei statisch bei dynamisch, nach<br />

Erzeugung Volume Erzeugung Volume Applikations-Last<br />

statisch statisch automatisch<br />

Anpassung an Last<br />

Daten Prefetch linear im FS nein Länge und Abstand<br />

Online Integritätsprüfung nein nein ja<br />

Geschwindigkeit Spiegelung langsam (Volume) langsam (Volume) nur (Meta-) Daten<br />

Zeit: Erzeugen eines Pools einige Minuten Minuten; ggf. reboot Sekunden<br />

Zeit: Erzeugen Filesystem Sekunden – Minuten Sekunden – Minuten < 1 Sekunde<br />

Linear bzgl Größe konstante Zeit<br />

Optimierung I/O Reihenfolge nein nein ja (Transaktionen)<br />

Online Disk-Auswahl nein nein ja (nach Last)<br />

I/O Lastausgleich zwischen FS nein nein ja (im zpool)<br />

I/O Bandbreiten Ausgleich nein nein ja (im zpool)<br />

Logging mit 2. Schreibvorgang ja (langsam) ja (langsam) nein (Transaktion)<br />

Daten im Logging enthalten nein Option (langsam bei ja (immer)<br />

hoher Datenrate)<br />

Automatische Block-Größe nein ja (nur Erzeugen) ja<br />

Sun Confidential: Internal Only 72


B: ZFS auf lokalen Platten<br />

> lokale Platten<br />

> Spiegelung im ZFS (Self Healing, Read Performance)<br />

> zpool create pool mirror disk1 disk2 ...<br />

> zpool add pool spare disk7<br />

> ggf. raidz oder raidz2<br />

> ggf. Einsatz von SSD für schnelles synchrones Schreiben<br />

Solaris Host<br />

1 2 3<br />

Sun Confidential: Internal Only 73


B: ZFS im SAN (1)<br />

> LUN vom Storage Subsystem (dort Raid-5 mit hot spare)<br />

> ZFS: Verzicht auf Self Healing<br />

> zpool create pool lun1<br />

> Redundanz vom Storage Subsystem, Integritätscheck via ZFS<br />

lun1<br />

Solaris Host<br />

Storage Subsystem Raid 5<br />

1 2 3 P Hot Spare<br />

Sun Confidential: Internal Only 74


B: ZFS im SAN (2)<br />

lun1<br />

> 2 LUNs vom Storage Subsystem (dort Raid-5 mit hot spare)<br />

> ZFS: mit Self Healing<br />

> zpool create pool mirror lun1 lun2<br />

> Redundanz vom Storage Subsystem und vom ZFS<br />

Storage Subsystem Raid 5<br />

1 2 3 P Hot Hot Spare Spare<br />

Solaris Host<br />

Storage Subsystem Raid 5<br />

1 2 3 P Hot Hot Spare Spare<br />

ggf. Firewall<br />

lun2<br />

Sun Confidential: Internal Only 75


B: ZFS und Datenbanken (1)<br />

• Verwaltung vereinfacht sich<br />

> Ersetzt Volume Manager<br />

> ZFS Volumes möglich (zfs create -V ...)<br />

– Wie raw device, aber ZFS write Transaktionen<br />

– z.B.: /dev/zvol/rdsk/tank/vol/v0<br />

• Empfehlung:<br />

> Separater zpool für Datenbank Log einrichten<br />

> Attribut recordsize für Log und Daten einstellen<br />

> NEU:<br />

– zpool mit SSD Platte (ggf. mirror) als Log einrichten<br />

– Oder: Gleich die ganze DB auf SSD (heute noch $$$$$$...)<br />

Sun Confidential: Internal Only 76


B: ZFS und Datenbanken (2): Datenbank<br />

Was ist eine Datenbank (u.a.)?<br />

• Konsistente Änderungen in einem Datenbestand<br />

• Transaktionen<br />

Realisierung:<br />

• Änderungen werden mittels Transaktions-Log abgesichert<br />

• Im Hintergrund: Schreiben in die DB Dateien<br />

• Danach Freigabe der Log-Einträge<br />

Genau so arbeitet auch ZFS mit dem ZFS Intent Log!<br />

Sun Confidential: Internal Only 77


B: Datenbank Schreibkonzept<br />

Wie schreibt eine Datenbank?<br />

Datenbank:<br />

synchron Schreiben<br />

(Integrität)<br />

Applikation<br />

Datenbank<br />

Log Writer Database Writer<br />

...<br />

asynchron Schreiben<br />

Sun Confidential: Internal Only 78


B: ZFS Schreibkonzept<br />

Wie schreibt eine ZFS?<br />

ZFS: FS Code<br />

synchron Schreiben<br />

(nur: fsync)<br />

ZFS Posix Layer<br />

Data Management Unit<br />

ZFS Intent Log Storage Pool Allocator<br />

...<br />

asynchron Schreiben<br />

Sun Confidential: Internal Only 79


B: Datenbank auf ZFS<br />

• Doppelte Implementierung von<br />

> Asynchrones Schreiben<br />

> Logging Funktion<br />

• Optimierte DB<br />

> Modell von Platte und Kopf<br />

> Stimmt nicht mehr auf ZFS<br />

> Das Modell der DB entspricht<br />

nicht mehr der Realität<br />

• Unoptimierte DB<br />

> ZFS implementiert die Optimierung<br />

Datenbank:<br />

Applikation<br />

Datenbank<br />

Log Writer Database Writer<br />

ZFS Posix Layer<br />

Data Management Unit<br />

ZFS Intent Log Storage Pool Allocator<br />

Sun Confidential: Internal Only 80<br />

...


B: ZFS und Datenbanken (3): Performance<br />

Optimierte Datenbanken:<br />

• Oracle, Informix, DB/2, Adabas C, ...<br />

• Optimiert auf Raw Devices (Kopfbewegungen)<br />

=> Daher beste Performance auf Raw Devices<br />

=> Rewrite Filesysteme (UFS, VxFS) gehen auch noch<br />

• ZFS ist eine zusätzliche Schicht (nochmal Log+Writer),<br />

die Performance wegnimmt<br />

Nicht optimierte Datenbanken<br />

• Sybase, MySQL, PostGreSQL, MaxDB, SQLite<br />

• ZFS stellt I/O Optimierung für die Datenbank<br />

=> Beste Performance auf ZFS<br />

Sun Confidential: Internal Only 81


B: Beispiel: ZFS und Sybase<br />

Sybase<br />

• schreibt Log<br />

• In-Place Updates der Daten (kein Re-Ordering)<br />

=> Mehr I/Os, weniger Datenrate<br />

Positiver Effekt der ZFS Transaktionen:<br />

• “Sybase auf ZFS ist 8x schneller als vorher!”<br />

(Feedback von einem ISP)<br />

Sun Confidential: Internal Only 82


ZFS und Datenbanken: Summary<br />

Kann ich denn nun ZFS für Datenbanken benutzen?<br />

• Ja!<br />

• ZFS bietet eine Vereinfachung der Platzverwaltung<br />

gegenüber dem Volume / Filesystem - Modell<br />

• Uneingeschränkt: die nicht I/O optimierten Datenbanken<br />

> Sybase, MySQL, PostGreSQL, MaxDB, SQLite, ...<br />

• Auf Raw-Devices optimierte DB funktionieren mit ZFS<br />

> Oracle, Informix, DB/2, Adabas C, ...<br />

> Höchste Performance erreicht man mit Raw-Devices<br />

> Lösbar seit S10 10/08 / in OpenStorage mit SSD im Log (Logzilla)<br />

Sun Confidential: Internal Only 83


Best Practices: ZFS Resilvering/Scrubbing<br />

• Resilvering / Scrubbing ist sehr schnell<br />

> SAN Luns: starke I/O und Speicherbelastung (bis 50%)<br />

Empfehlungen:<br />

• Beeinträchtigung des Betriebs einkalkulieren<br />

• Resilvering/Scrubbing ggf. auf Maintenance Zeiten<br />

verschieben (SAN devices)<br />

• Einzeln statt parallel Resilvering/Scrubbing einleiten<br />

• Mindestens Solaris 10 8/07 nutzen!<br />

Einstellung der Speicherbelastung mit Patch möglich<br />

Sun Confidential: Internal Only 84


B: ZFS Speicherbedarf<br />

• ZFS nutzt einen neuen Cache-Mechanismus: ARC<br />

> Mischung von LRU und FIFO Algorithmus<br />

• Mehr Daten im Cache → mehr Speicherbedarf als UFS<br />

• Jedes FS braucht Platz, viele ZFS brauchen viel Platz<br />

Empfehlungen:<br />

• Mehr Speicher als bei UFS/vxfs einkalkulieren<br />

• Mindestens Solaris 10 8/07 nutzen<br />

• Große Applikationen: ARC limitieren<br />

> /etc/system: set zfs:zfs_arc_max = 0x780000000<br />

Sun Confidential: Internal Only 85


B: Verkleinerung zpool<br />

Verkleinerung ZFS mittels Attribute<br />

> Platz sofort in anderen ZFS des gleichen Pools nutzbar|<br />

Verkleinerung zpool<br />

• Allgemein: noch nicht implementiert<br />

• Verfügbar heute:<br />

> zpool remove von hot spares geht<br />

> zpool detach von Spiegelseiten geht<br />

> zpool replacedurch gleiche/größere Disks geht<br />

Sun Confidential: Internal Only 86


B: ZFS und Platten-Schreibcache<br />

ZFS nutzt den Schreibcache von Platten<br />

• Voraussetzung: Platte als ganzes ist im Zpool<br />

> zpool create tank c5t6d7 # diskname ohne s*<br />

• Konsistenz durch force-write-cache SCSI-Kommando<br />

(vor dem Transaktions-Commit = Schreiben uberblock)<br />

• force-write-cache wirkt ggf. negativ:<br />

> Transaktion (alle 5 Sek.) leer den Cache (ggf. vollständig)<br />

• Abhilfe:<br />

> Slice der Platte in den Zpool konfigurieren<br />

> HDS: ignoriert force-write-cache (keine Einstellung nötig)<br />

> Konfigurierbar bei LSI (25xx, 3510, 6130, 6140, 6540, ...)<br />

> Global: /etc/system: setzfs:zfs_noflushcache = 1<br />

Sun Confidential: Internal Only 87


ZFS nutzt den Platten-Schreibcache<br />

ZFS nutzt den Schreibcache von Platten<br />

• Voraussetzung: Platte als ganzes ist im Zpool<br />

> zpool create tank c5t6d7 # diskname ohne s*<br />

• Konsistenz durch force-write-cache SCSI-Kommando<br />

(vor dem Transaktions-Commit = Schreiben uberblock)<br />

Sun Confidential: Internal Only 88


B: ZFS und ZIL<br />

• ZIL – ZFS Intent Log<br />

> Daten werden mit den Transaktionen geschrieben,<br />

i.d.R. alle 5 Sekunden<br />

> Manche Applikationen schreiben synchron / nutzen fsync<br />

– Synchron heisst: Daten liegen garantiert auf der Platte<br />

– Konsistenz von Datenstrukturen der Applikation<br />

> Synchrones Schreiben im ZFS erfolgt in das ZIL<br />

> Das ZIL ist das einzige zpool Objekt,<br />

das ohne Transaktion geschrieben wird!<br />

• ZIL abschalten: Performance-Boost für sync writes<br />

> ABER: Die Konsistenz der Daten ist in Gefahr!<br />

• Besser: ZIL auf SSD legen<br />

Sun Confidential: Internal Only 89


B: Anzahl paralleler Writes pro Device<br />

• Vor Solaris 10 5/08 und bei älteren Nevada builds:<br />

Anzahl der I/Os pro Device ist limitiert auf 35<br />

• Einstellung in /etc/system: zfs_vdev_max_pending=55<br />

> Anzahl der IOs pro Platte pro Sekunde<br />

> Ähnlich max_throttle beim sd / ssd Treiber<br />

• Limit existiert bei neueren ZFS Versionen nicht mehr<br />

Sun Confidential: Internal Only 90


B: ZFS ACLs<br />

ZFS ACLs sind<br />

• Weitergehend als die von UFS<br />

• Anders als die von UFS und NFSv3<br />

• Angepasst an NFSv4<br />

Aufgetretene Konflikte:<br />

• Datentransfer zu ZFS (ACLs in Originaldaten)<br />

• Einspielen UFS/vxfs Backup auf ZFS<br />

• Linux NFS Implementierung<br />

> (ältere Versionen: noacl fehlt, Rechte-Konflikte)<br />

Sun Confidential: Internal Only 91


B: ZFS und Shadow Image (et. al.)<br />

• Statt SI Benutzung von zfs snapshot/send/receive<br />

• ODER:<br />

> Storage Subsystem: Shadow Image einrichten<br />

> Solaris: zfs snapshot<br />

> Solaris: sync<br />

> Solaris: Warten bis I/O gesettled (~2 Transaktionen)<br />

> Storage Subsystem: Shadow Image trennen<br />

> Solaris: zpool import (auf anderem System)<br />

> Solaris: zfs rollback auf snapshot<br />

(auf anderem System)<br />

• unterschiedliche Rechner, da zpool-ID ist gleich<br />

Sun Confidential: Internal Only 92


ZFS - Zusammenfassung<br />

• Einfach – Macht einfach das, was der Administrator vor hat.<br />

• Mächtig – Pooled storage, Snapshots, Clones, Compression, Scrubbing, RAID-Z<br />

• Sicher – Entdeckt und Korrigiert (!!!) stille Daten-Korruption.<br />

• Schnell – Dynamisches Striping, Intelligentes Prefetch, Pipelined I/O<br />

• Offen – Source und Diskussion unter http://www.opensolaris.org/os/community/zfs<br />

• Kostenfrei<br />

Sun Confidential: Internal Only 93


ARC – Adaptive Recovery Cache<br />

• FIFO – Seite fliegt raus, wenn schon lange allokiert<br />

• LRU – Seite fliegt raus, wenn lange unbenutzt<br />

> Das Beste! (bei Gleichverteilung der Nutzung der Seiten)<br />

... ABER: Reale Rechner haben keine Gleichverteilung!<br />

• Häufigkeiten sind bei 2 Punkten der Statistik<br />

> Seite wird häufig wieder benutzt<br />

> Seite wird genau einmal benutzt, dann lange Zeit nicht mehr<br />

• ARC erkennt das automatisch<br />

> Nichtbenutzung für eine gewisse Zeit: Seite fliegt raus<br />

> Mehr Platz für wiederbenutzte Seiten!<br />

Sun Confidential: Internal Only 94


Hierarchische Caches<br />

Was ist ein Cache?<br />

> Puffert Informationen in schnellem Speicher<br />

> Benutzt Statistik um Platz zu schaffen<br />

Hierarchische Caches<br />

> Ohne zentrale Kontrolle:<br />

– Hierarchische Caches können nicht funktionieren<br />

– Die Statistik stimmt nicht!<br />

> CPU: L1-, L2-, (L3-) Cache vs. Memory<br />

– Hier: von der CPU gesteuert<br />

> Buffercache im Hauptspeicher vs. Platte<br />

– Vom Filesystem gesteuert<br />

Sun Confidential: Internal Only 95


Storage Subsystem Cache<br />

• Hat falsche Statistik:<br />

> häufig Benutztes (Buffercache) ist dort schon rausgeflogen!<br />

> Würde nur wirken, wenn wesentlich größer als Buffercache<br />

– Früher war das der Fall<br />

– Heute ist die Bedingung seltener erfüllt<br />

• Ist so teuer wie Hauptspeicher im Rechner<br />

• Wird auch als Schreibcache benutzt<br />

> Teilweise ggs. Störung<br />

Sun Confidential: Internal Only 96


OpenStorage Lösung mit ZFS<br />

• Readzilla: SSDs für schnelles Lesen<br />

• Nutzung als L2ARC: Level 2 ARC Cache<br />

> ZFS kontrolliert mit seiner Statistik die Inhalte des Readzilla<br />

Überblick:<br />

> Read/Write-Cache im System: ARC im Hauptspeicher<br />

> Write-Cache Nutzung in den Platten<br />

> Optionaler Write-Cache mit Logzilla<br />

> Optionaler Read-Cache mit Readzilla<br />

> Logzilla und Readzilla sind an Bedarf anpassbar<br />

> SSDs sind günstiger als Hauptspeicher<br />

Sun Confidential: Internal Only 97


Fragen?<br />

<strong>Ulrich</strong> <strong>Gräf</strong><br />

<strong>Ulrich</strong>.Graef@Sun.COM<br />

http://blogs.sun.com/Solarium<br />

http://blogs.sun.com/blug<br />

98 98

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!