Hosting eines ZFS-Servers als virtueller Gast

23

Ich bin noch neu in ZFS. Ich habe Nexenta verwendet, möchte aber auf OpenIndiana oder Solaris 11 Express umsteigen. Momentan denke ich darüber nach, den ZFS-Server als Gast innerhalb von ESXi, Hyper-V oder XenServer zu virtualisieren (ich habe mich noch nicht entschieden - ich neige zu ESXi für VMDirectPath- und FreeBSD-Unterstützung).

Der Hauptgrund dafür ist, dass ich anscheinend genug Ressourcen habe, um damit umzugehen, sodass problemlos 1-3 andere VMs gleichzeitig ausgeführt werden können. Hauptsächlich Windows Server. Vielleicht auch eine Linux / BSD-VM. Ich möchte, dass der virtualisierte ZFS-Server alle Daten für die anderen VMs hostet, damit deren Daten auf physisch getrennten Datenträgern von den ZFS-Datenträgern gespeichert werden können (Bereitstellung als iscsi oder nfs).

Der Server verfügt derzeit über einen AMD Phenom II mit insgesamt 6 Kernen (2 nicht gesperrt), 16 GB RAM (maximal) und einen angeschlossenen LSI SAS 1068E HBA mit (7) 1 TB SATA II-Festplatten (RAIDZ2-Planung mit Hot Spare). Ich habe auch (4) 32GB SATA II SSDs an das Motherboard angeschlossen. Ich hoffe, zwei der SSDs auf einen Bootspiegel (für den virtuellen Host) zu spiegeln und die anderen beiden SSDs für ZIL und L2ARC (für den ZFS-VM-Gast) zu belassen. Ich bin bereit, zwei weitere Festplatten hinzuzufügen, um die VM-Gäste zu speichern und alle sieben aktuellen Festplatten als ZFS-Speicher zuzuweisen. Hinweis: Das Motherboard ist nicht hat IOMMU Unterstützung als die 880G es nicht unterstützt, aber ich habe ein 890FX Bord habe , die IOMMU tut, wenn es einen großen Unterschied macht.

Meine Fragen sind:

1) Ist es ratsam, dies zu tun? Ich sehe keine offensichtlichen Nachteile (weshalb ich mich frage, warum es niemand anders erwähnt hat). Ich habe das Gefühl, dass ich ein großes Versehen machen könnte, und ich würde es hassen, mich dazu zu verpflichten, alle meine Daten zu überfliegen, um von einem winzigen Detail, das ich vermisst habe, auf den neuesten Stand zu kommen.

2) ZFS Virtual Guest Performance? Ich bin bereit, einen kleinen Leistungseinbruch hinzunehmen, aber ich denke, wenn der VM-Gast vollen Festplattenzugriff auf die Festplatten hat, ist die Festplatten-E / A-Leistung zumindest vernachlässigbar (im Vergleich zur Ausführung von ZFS ohne Virtualisierung). . Kann jemand aus Erfahrung mit dem Hosten eines ZFS-Servers als VM-Gast darüber sprechen?

osij2is
quelle
Sie möchten Daten für alle anderen VMs hosten. Wollen Sie irgendwann eine Deduplizierung? In diesem Fall sollte es sich eigentlich um einen eigenen Computer handeln, da die Deduplizierung sehr speicherintensiv ist. Schauen Sie sich doch etwas wie SmartOS für Ihre ZFS-Anforderungen an. Auf diese Weise erhalten Sie auch einen Hypervisor.
Devicenull
Ich habe über Deduplizierung nachgedacht, aber im Moment möchte ich es lieber nicht verwenden. Ich werde SmartOS untersuchen. Ich habe noch nichts davon gehört, also werde ich das überprüfen.
osij2is

Antworten:

38

Ich habe eine Reihe dieser "All-in-One" -ZFS-Speicherkonfigurationen erstellt. Ursprünglich inspiriert von den hervorragenden Beiträgen bei Ubiquitous Talk , verfolgt meine Lösung einen etwas anderen Ansatz beim Hardwaredesign, liefert aber das Ergebnis eines gekapselten virtualisierten ZFS-Speichers.

Um Ihre Fragen zu beantworten:

  • Die Entscheidung, ob dies ein weiser Ansatz ist, hängt wirklich von Ihren Zielen ab. Was versuchst du zu erreichen? Wenn Sie eine Technologie (ZFS) haben und nach einer Anwendung dafür suchen, ist dies eine schlechte Idee. Sie sollten einen geeigneten Hardware-RAID-Controller verwenden und Ihre VMs auf einer lokalen VMFS-Partition ausführen. Es ist der Weg des geringsten Widerstands. Wenn Sie jedoch einen bestimmten Grund für die Verwendung von ZFS haben (Replikation, Komprimierung, Datensicherheit, Portabilität usw.), ist dies definitiv möglich, wenn Sie bereit sind, sich anzustrengen.

  • Die Leistung hängt stark von Ihrem Design ab, unabhängig davon, ob Sie auf Bare-Metal oder virtuell arbeiten. Die Verwendung von PCI-Passthrough (oder AMD IOMMU in Ihrem Fall) ist unerlässlich, da Sie Ihrer ZFS-VM direkten Zugriff auf einen SAS-Speichercontroller und -Datenträger gewähren würden. Solange Ihrer VM eine angemessene Menge an RAM- und CPU-Ressourcen zugewiesen ist, ist die Leistung nahezu nativ. Natürlich ist Ihr Pooldesign wichtig. Bitte berücksichtigen Sie Spiegel im Vergleich zu RAID Z2. ZFS skaliert über vdevs und nicht über die Anzahl der Festplatten .


Meine Plattform ist VMWare ESXi 5 und mein bevorzugtes ZFS-fähiges Betriebssystem ist NexentaStor Community Edition .

Das ist mein Zuhause - Server . Es ist ein HP ProLiant DL370 G6 , auf dem ESXi von einer internen SD-Karte ausgeführt wird. Die beiden gespiegelten 72-GB-Festplatten in der Mitte sind mit dem internen Smart Array P410 RAID-Controller verbunden und bilden ein VMFS-Volume. Dieses Volume enthält eine NexentaStor-VM. Denken Sie daran , dass die virtuelle Maschine zum Leben braucht ZFS irgendwo auf stabile Lagerung.

Es gibt einen LSI 9211-8i SAS-Controller , der an den Laufwerkskäfig angeschlossen ist und sechs 1-TB-SATA-Festplatten auf der rechten Seite enthält. Es wird an die virtuelle NexentaStor-Maschine weitergeleitet, sodass Nexenta die Festplatten als RAID 1 + 0-Setup erkennt. Bei den Festplatten handelt es sich um Western Digital Green WD10EARS- Laufwerke, die ordnungsgemäß mit einer modifizierten zpoolBinärdatei ausgerichtet sind.

Ich verwende in dieser Installation kein ZIL-Gerät oder keinen L2ARC-Cache.

Bildbeschreibung hier eingeben

Der VM sind 6 GB RAM und 2 vCPUs zugewiesen. Wenn Sie in ESXi PCI-Passthrough verwenden, wird eine Speicherreservierung für den gesamten zugewiesenen Arbeitsspeicher der VM erstellt.

Ich gebe dem NexentaStor VM zwei Netzwerkschnittstellen. Eine ist für den Verwaltungsverkehr. Der andere ist Teil eines separaten vSwitch und verfügt über eine vmkernel-Schnittstelle (ohne externen Uplink). Auf diese Weise kann die VM NFS-Speicher bereitstellen, der von ESXi über ein privates Netzwerk bereitgestellt werden kann. Sie können problemlos eine Uplink-Schnittstelle hinzufügen, um den Zugriff auf externe Hosts zu ermöglichen.

Installieren Sie Ihre neuen VMs im ZFS-exportierten Datenspeicher. Stellen Sie sicher, dass Sie die Parameter "Starten / Herunterfahren der virtuellen Maschine" in ESXi festlegen. Sie möchten, dass die Storage-VM vor den Gastsystemen gestartet und zuletzt heruntergefahren wird.


Bildbeschreibung hier eingeben

Hier sind die Bonnie ++ - und Iozone- Ergebnisse eines Laufs direkt auf der NexentaStor-VM. Die ZFS-Komprimierung ist deaktiviert, damit der Test mehr zuordenbare Zahlen anzeigt. In der Praxis sollte jedoch immer die ZFS-Standardkomprimierung (nicht gzip) aktiviert sein.

# bonnie++ -u root -n 64:100000:16:64

Version  1.96       ------Sequential Output------ --Sequential Input- --Random-
Concurrency   1     -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
saint           12G   156  98 206597  26 135609  24   410  97 367498  21  1478  17
Latency               280ms    3177ms    1019ms     163ms     180ms     225ms
Version  1.96       ------Sequential Create------ --------Random Create--------
saint               -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files:max:min        /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
    64:100000:16/64  6585  60 58754 100 32272  79  9827  58 38709 100 27189  80
Latency              1032ms     469us    1080us     101ms     375us   16108us

# iozone -t1 -i0 -i1 -i2 -r1m -s12g

    Iozone: Performance Test of File I/O

    Run began: Wed Jun 13 22:36:14 2012

    Record Size 1024 KB
    File size set to 12582912 KB
    Command line used: iozone -t1 -i0 -i1 -i2 -r1m -s12g
    Output is in Kbytes/sec
    Time Resolution = 0.000001 seconds.
    Throughput test with 1 process
    Each process writes a 12582912 Kbyte file in 1024 Kbyte records

    Children see throughput for  1 initial writers  =  234459.41 KB/sec
    Children see throughput for  1 rewriters        =  235029.34 KB/sec
    Children see throughput for  1 readers          =  359297.38 KB/sec
    Children see throughput for 1 re-readers        =  359821.19 KB/sec
    Children see throughput for 1 random readers    =   57756.71 KB/sec
    Children see throughput for 1 random writers    =  232716.19 KB/sec

Dies ist ein NexentaStor DTrace-Diagramm, in dem die IOPS- und Übertragungsraten der Storage-VM während des Testlaufs dargestellt sind. 4000 IOPS und 400+ Megabyte / Sekunde sind für solche Low-End-Festplatten ziemlich vernünftig. (obwohl große Blockgröße) Bildbeschreibung hier eingeben

Weitere Hinweise.

  • Sie sollten Ihre SSDs testen, um festzustellen, ob sie direkt einer VM präsentiert werden können oder ob DirectPath den gesamten Motherboard-Controller auswählt.
  • Sie haben nicht viel CPU-Leistung, also beschränken Sie die Speichereinheit auf 2 vCPUs.
  • Verwenden Sie RAIDZ1 / Z2 / Z3 nur, wenn Sie wirklich Speicherplatz benötigen.
  • Verwenden Sie keine Deduplizierung. Die Komprimierung ist kostenlos und für VMs sehr nützlich. Eine Deduplizierung würde viel mehr RAM + L2ARC erfordern, um effektiv zu sein.
  • Starten Sie ohne die SSDs und fügen Sie sie bei Bedarf hinzu. Bestimmte Workloads erreichen weder ZIL noch L2ARC .
  • NexentaStor ist ein Komplettpaket. Ein solides Management-GUI hat den Vorteil, aber ich habe auch von Erfolg mit Napp-It gehört .
ewwhite
quelle
+1. Vielen Dank für alle Informationen! Um Ihre Frage zu beantworten, mache ich das aus ein paar Gründen. Ich mache dies hauptsächlich, um die anderen CPU-Kerne zu nutzen, um eine oder zwei andere VMs zu erstellen (ohne ZFS) und um meinem virtuellen Opteron-Server ein iSCSI-Ziel bereitzustellen. Meine Gründe für ZFS sind (in keiner bestimmten Reihenfolge) Komprimierung sowie Datensicherheit und -replikation. Deduplizierung sieht sehr cool aus, aber in Bezug auf Ressourcen und meine Daten bin ich mir nicht sicher, ob es notwendig ist. Ich verwende derzeit Nexenta, habe aber überlegt, auf Solaris Express oder OpenIndiana umzusteigen, wenn ich die Festplatten weiterhin stapele, um die 18-TB-Grenze zu überschreiten.
osij2is
Ich verstehe also Ihren Kommentar, ob Sie die SSDs für L2ARC oder ZIL verwenden sollen oder nicht, und ich bin bereit, genau das zu tun. Sehen Sie sich zuerst die Leistung an, DANN bestimmen Sie, ob ZIL und / oder ARC hinzugefügt werden sollen. Was das Spiegeln im Vergleich zu RAIDZ angeht, so hat das Spiegeln nach dem Lesen Ihrer Kommentare und dem Lesen dieses Blogposts ( constantin.glez.de/blog/2010/01/… ) einen leichten Nachteil . Ich brauche nicht wirklich Speicherplatz, aber wenn ich Redundanz und schnelle Lese- / Schreibfähigkeiten haben kann, denke ich, werde ich darauf umsteigen. Welchen Stauraum ich auch suchen könnte, wäre es nicht wert.
osij2is
Denken Sie außerdem daran, dass die Komprimierung nützlich ist. Ich bezahle kommerzielles Nexenta für Client-Systeme und alles, was größer als 18 TB ist. Die gleichen Tipps gelten jedoch auch für OpenIndiana.
Ewwhite
Verwenden Sie eine E1000-vnic oder eine VMXNet3-vnic für das NFS-Netzwerk? Weil ich mit einem ähnlichen Setup nur 1 Gbit / s zwischen Nexenta / Solaris und VMware erhalte und nicht herausfinden kann, wie ich mehr Geschwindigkeit erreichen kann. Welche Version von NexentaStor? Ich vermute, die derzeit verfügbare Version ist defekt ...
Josh