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.
msize=262144
auf einer SSD und es brachte meinefio-cdm
sequentiellen Lese- / Schreibzahlen von ~ 90 MiB / s auf> 1000 MiB / s! Die SSD macht ~ 430 MiB / s auf dem Host.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.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
quelle
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.
quelle