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 ...
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