Wie kann der Hostordner effizient für KVM-Gäste freigegeben werden?

7

Ich konfiguriere den Dienst, der viele von nginx hochgeladene Dateien in / srv / storage dir auf dem Hostsystem speichert. Diese Dateien werden von Worker-KVM-Gästen verarbeitet, die möglicherweise neue Dateien erstellen oder vorhandenen Attribute erweiterte Attribute zuweisen. Dateien werden nie überschrieben, sondern schließlich von einem Mitarbeiter gelöscht.

Der Host-Server hat also eine Schreibgeschwindigkeit von ca. 177 MB / s. Das KVM-Image ist eine QCOW2-Datei, die auf dem Host-Dateisystem gespeichert ist. Dank dieser Virtio-Einstellung erreicht das Image in der KVM-Instanz ~ 155 MB / s:

<driver name='qemu' type='raw' cache='none' io='native'/>

Ich kann solche Ergebnisse jedoch nicht für freigegebene Ordner erhalten. Ich habe max 40MB / s mit virtfs aka virtio 9p . Es scheint, dass es kein AIO-Äquivalent für mount gibt:

mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage

Ich dachte auch darüber nach:

  • Es fehlen keine NFS-erweiterten Attribute
  • kein GlusterFS - funktioniert, aber die Leistung ist schlechter als virtio, weil vernetzt, eine Art Overkill auf einer einzelnen Hardwaremaschine,
  • Vielleicht LVM-Volume für R / W teilen? - Eigentlich ist der Ordner in einer separaten Partition gespeichert, aber ich habe irgendwo gelesen, dass LV nicht gemeinsam genutzt werden kann, da dies zu einer Beschädigung von fs führen kann.
  • Hochgeladene Dateien auf QCOW2 behalten und von allen Parteien teilen?
  • Nginx und hochgeladene Dateien in KVM-Instanz auf QCOW2 behalten, das Bild irgendwie mit allen Gästen teilen?
  • iSCSI - möglich mit einzelner Partition?

So können Sie den Ordner des Hosts effizient für KVM-Gäste freigeben, wobei erweiterte Attribute funktionieren.

gertas
quelle

Antworten:

2

CIFS kann erweiterte Attribute ausführen. Sie können es mit Samba unter Linux einrichten.

suprjami
quelle
1

Wenn Ihr Problem der Durchsatz ist, können Sie von einer Erhöhung der maximalen Paketgröße profitieren. Der Standardwert ist 8 KiB (msize = 8192).

Der optimale Wert kann einige Experimente erfordern und kann abhängig von Ihrer Verwendung und dem zugrunde liegenden Dateisystem variieren. Ich habe jedoch festgestellt, dass 256 KB (msize = 262144) für meine Zwecke gut funktionieren. Dadurch stieg der Durchsatz von ~ 150 MB / s auf ~ 1,5 GB / s.

Siehe auch: https://lime-technology.com/forum/index.php?topic=36345.15

Bob
quelle
Whoa, schön! Versucht msize=262144auf einer SSD und es brachte meine fio-cdmsequentiellen Lese- / Schreibzahlen von ~ 90 MiB / s auf> 1000 MiB / s! Die SSD macht ~ 430 MiB / s auf dem Host.
Genpfault
@genpfault Während 90 langsam aussieht, sieht 1000 auch zu schnell aus, wenn Sie mit einer einzelnen Nicht-NVMe-SSD arbeiten. Es ist möglich, dass Caching beteiligt ist - versuchen Sie es mit einem längeren Test (ich glaube, ich habe einen erweiterten Test durchgeführt dd). Wenn Sie sehr komprimierbare Daten verwenden (z. B. dd if=/dev/zero), kann dies den Benchmark-Durchsatz je nach Dateisystem und Festplatten-Firmware erheblich erhöhen.
Bob
0

Wenn Sie ein LV-Volume entweder direkt oder über iSCSI freigeben möchten, können Sie es ohne einen Cluster-FS nicht als R / W freigeben. Wenn Sie nicht über genügend Speicherplatz verfügen, können Sie zwei Volumes gemeinsam nutzen, ein R / W auf dem Host und das andere R / W auf dem Gast, während das andere Pary nur über Leseberechtigungen für das Nicht-R / W-Volume verfügt. Und halten Sie diese beiden mit drbd oder rsync synchron.

Ziemlich hässlich, aber das ist es, was Sie tun, wenn Sie NFS nicht verwenden können

dyasny
quelle
-2

Schließlich habe ich von KVM zu LXC + Docker Containerization gewechselt, die Bind Mounts unterstützt. Ausgewählte Hostverzeichnisse werden im Container bereitgestellt. Da kein Netzwerk oder keine Übersetzung erforderlich ist, ist die Leistung dieselbe wie auf dem Host-Computer. Zusätzlich können mehrere Container ohne exklusive Sperren gleichzeitig auf ein einzelnes "Volume" schreiben.

gertas
quelle