Die LVM-Volumengruppe wird zwischen KVM / libvirt-Host und Gästen geteilt. Ist dies eine schlechte Idee?

12

Ich habe gerade einen glänzenden neuen KVM / libvirt-basierten virtuellen Maschinenhost erstellt, der 4 SATA II-Festplatten enthält und CentOS 5.5 x86_64 ausführt.

Ich habe beschlossen, Laufwerke virtueller Maschinen als logische Volumes in einer LVM-Volume-Gruppe zu erstellen, die als libvirt-Speicherpool verwaltet wird, anstatt wie üblich die Laufwerke als qcow-Images zu erstellen.

Ich kann mich nicht entscheiden, ob ich die logischen Volumes der virtuellen Maschine in der Volume-Gruppe des VM-Hosts oder in einer dedizierten Volume-Gruppe erstellen soll.

Welche Methode soll ich wählen und warum?


Methode 1: Verwenden Sie die Volume-Gruppe des VM-Hosts

Implementierung:

  • kleines RAID1 md0mit dem /bootDateisystem
  • großer RAID10 md1belegt den verbleibenden Speicherplatz, der eine LVM-Datenträgergruppe enthält vghost. vghostEnthält das Root-Dateisystem und die Swap-Partition des VM-Hosts
  • Erstellen Sie die Festplatten der virtuellen Maschine vghostnach Bedarf als logische Volumes

Vorteile:

  • Wenn das Root-Dateisystem des VM-Hosts keinen Speicherplatz mehr hat, kann ich vghostrelativ einfach mehr Speicherplatz zuweisen
  • Das System ist bereits in Betrieb (aber es ist keine große Sache, von vorne anzufangen)

Nachteile:

Trotz der Tatsache, dass diese Methode zu funktionieren scheint, kann ich das Gefühl nicht loswerden, dass dies irgendwie eine schlechte Idee ist. Ich fühle, dass:

  • Dies kann ein Sicherheitsrisiko darstellen
  • Irgendwann in der Zukunft stelle ich möglicherweise Einschränkungen beim Setup fest und wünsche mir, dass ich eine dedizierte Gruppe verwende
  • Das System (CentOS, libvirt usw.) ist möglicherweise nicht für diese Verwendung ausgelegt. Daher kann es vorkommen, dass ich versehentlich die Dateien und / oder das Dateisystem des VM-Hosts beschädige / verliere

Methode 2: Verwenden Sie eine dedizierte Datenträgergruppe

Implementierung:

  • gleiche md0und md1wie in Verfahren 1, mit der Ausnahme make md1gerade groß genug für das VM - Host enthalten (z. B. 5 bis 10 GB)
  • großer RAID10 md2belegt den verbleibenden Platz. md2enthält eine LVM-Volume-Gruppe vgvms, deren logische Volumes ausschließlich von virtuellen Maschinen verwendet werden sollen

Vorteile:

  • Ich kann basteln, vgvmsohne befürchten zu müssen, das Host-Betriebssystem zu beschädigen
  • Dies scheint eine elegantere und sicherere Lösung zu sein

Nachteile:

  • Wenn das Dateisystem des VM-Hosts keinen Speicherplatz mehr hat, müsste ich Teile des Dateisystems (z. B. / usr oder / var) darauf verschieben vgvms, was nicht sehr schön erscheint.
  • Ich muss das Host-Betriebssystem neu installieren (was mir, wie bereits erwähnt, nichts ausmacht)

UPDATE 1:

Ein Grund, warum ich mir Sorgen mache, dass mir der Festplattenspeicher des VM-Hosts in Methode 2 ausgeht, ist, dass ich nicht weiß, ob der VM-Host leistungsfähig genug ist, um alle Dienste in virtuellen Maschinen auszuführen, d. H. Möglicherweise muss ich einige / alle Dienste von virtuellen Maschinen auf das Host-Betriebssystem migrieren.

VM-Hosthardwarespezifikation:

  • Phenom II 955 X4 Black Edition-Prozessor (3,2 GHz, 4-Kern-CPU)
  • 2x4 GB Kingston PC3-10600 DDR3 RAM
  • Gigabyte GA-880GM-USB3-Motherboard
  • 4x WD Caviar RE3 500 GB SATA II-Festplatten (7200 U / min)
  • Antec BP500U Basiq 500W ATX Netzteil
  • CoolerMaster CM 690 Koffer

UPDATE 2:

Ein Grund, warum ich der Meinung bin, dass das System möglicherweise nicht für die Verwendung der Host-VG als libvirt-Speicherpool in Methode 1 ausgelegt ist, ist ein Verhalten, das ich in virt-manager festgestellt habe:

  • nach dem Hinzufügen hat es sich beschwert, dass es das VG nicht aktivieren konnte (offensichtlich, weil das Host-Betriebssystem es bereits aktiviert hat)
  • Nach dem Entfernen wurde dies abgelehnt, da die VG nicht deaktiviert werden konnte (offensichtlich, weil das Host-Betriebssystem immer noch die Root- und Swap-LVs verwendet).
Mosno
quelle
Ich habe eine Frage (Nr. 272324) gestellt, auf die Ihre Lösung Nr. 1 eine sehr gute Antwort gewesen wäre! Und genau dafür habe ich mich in einem ähnlichen Setup entschieden - und damit bin ich bisher ziemlich zufrieden. Ich habe jedoch ein Problem, bei dem diskIO im Gast viel langsamer ist, als wenn derselbe LV im Host "schleifenmontiert" wird.
Stolsvik

Antworten:

3

Durchdachte Frage!

Ich würde mit Methode 2 gehen, aber das ist eher eine persönliche Präferenz. Für mich sind die Nachteile von Methode 2 kein großes Problem. Ich sehe nicht, dass das Host-Betriebssystem über seine 5-10 GB-Partition hinauswächst, es sei denn, Sie installieren zusätzliches Material darauf, was Sie wirklich nicht tun sollten. Der Einfachheit und Sicherheit halber sollte das Host-Betriebssystem wirklich eine reine Minimalinstallation sein, auf der nur das für die Administration erforderliche Minimum (z. B. sshd) ausgeführt wird.

Die Methode 1 Nachteile sind auch kein wirkliches Problem, IMO. Ich glaube nicht, dass es ein zusätzliches Sicherheitsrisiko geben würde, da, wenn eine verwurzelte VM aus ihrer Partition ausbrechen und andere Partitionen infizieren / beschädigen kann, das Host-Betriebssystem in einer separaten VG möglicherweise keinen Unterschied macht. Die anderen beiden Nachteile kann ich nicht aus direkter Erfahrung ansprechen, aber ich bin der Meinung, dass CentOS, LVM und libvirt flexibel und robust genug sind, um sich keine Sorgen zu machen.

EDIT - Antwort auf Update 1

Heutzutage ist die Leistungseinbuße bei der Virtualisierung sehr gering, insbesondere bei Verwendung von Prozessoren mit integrierter Unterstützung. Ich halte es daher nicht für sinnvoll, einen Dienst von einer Gast-VM auf das Host-Betriebssystem zu verschieben. Sie könnten einen Geschwindigkeitsschub von 10% erzielen, wenn Sie auf dem "Bare-Metal" -Programm laufen, aber Sie würden die Vorteile eines kleinen, engen und sicheren Host-Betriebssystems verlieren und möglicherweise die Stabilität des gesamten Servers beeinträchtigen. Lohnt sich nicht, IMO.

Vor diesem Hintergrund würde ich immer noch Methode 2 bevorzugen.

Antwort auf Update 2

Es scheint, dass die Art und Weise, in der libvirt davon ausgeht, dass die Speicherung erfolgt, ein weiterer Punkt für Methode 2 ist. Meine Empfehlung lautet: Fahren Sie mit Methode 2 fort.

Steven Montag
quelle
Vielen Dank. Ich habe 2 Aktualisierungen an meine Frage angehängt, die weiter erklären, warum ich einige der Nachteile aufgelistet habe, die Sie angesprochen haben. Ändern die Updates Ihre Meinung überhaupt?
Mosno
@mosno: Meine Antwort wurde als Antwort auf Ihre Aktualisierungen aktualisiert.
Steven Montag
Vielen Dank an alle für Ihre Antworten, alle waren hilfreich für mich und es war schwer zu entscheiden, wessen Antwort ich annehmen möchte. Ich entscheide mich für Steven's, weil ich der Meinung bin, dass es die beste Anstrengung ist, die gestellte Frage zu beantworten. Obwohl ich der Meinung bin, dass Methode 2 wahrscheinlich besser ist, habe ich mich aus Zeitgründen für Methode 1 entschieden, da dies funktioniert.
Mosno
1
Außerdem bleibe ich vorerst bei Methode 1, weil ich denke, es wäre lehrreich, die Grenzen dieser Methode zu erkunden. Ich habe zum Beispiel erfahren, dass, wenn Sie in einem Gastbetriebssystem ein LVM-PG direkt auf dem Gerät erstellen (z. B. device / dev / vda anstelle von partition / dev / vda1), der pvscan des Hostbetriebssystems die PV des Gastbetriebssystems auflistet (d. H. benutze / dev / vda1, nicht / dev / vda).
Mosno
1

Solange nur ein System versucht, einen bestimmten LV im Lese- / Schreibmodus zu verwenden, ist es möglich, dasselbe VG für Host und Gäste zu verwenden. Wenn mehrere Systeme versuchen, auf dieselbe LV zu schreiben, führt dies zu einer Beschädigung des Dateisystems.

Ignacio Vazquez-Abrams
quelle
Dies ist mit Sicherheit komplexer zu handhaben. Es ist schlau ... vielleicht zu schlau.
Der Unix-Hausmeister
@ user37899: Dies ist der übliche Weg, mit LVM
Javier
danke, aber ich verstehe das; Ich hatte nicht vor, das zu tun.
Mosno
Wenn ich auf dem Host-Betriebssystem einen "lvscan" durchführe, wird die LV des Gasts als "ACTIVE" gemeldet. Der Host hat den LV nicht gemountet. Handelt es sich bei der LV lediglich um einen "Lese- / Schreibmodus", oder handelt es sich um eine explizite Bereitstellung für das Dateisystem des Hosts?
Mosno
Ich meine ein explizites R / W-Mount.
Ignacio Vazquez-Abrams
1

Vielleicht möchten Sie einen Blick darauf werfen, vielleicht basteln und sehen, wie dieses Projekt das macht, wovon Sie sprechen.

ProxmoxVE ist ein Bare-Metal-KVM-Host, der eine Perl-Implementierung von libvirt anstelle von RHELs schwerem Gegenstück verwendet. Es implementiert beide Szenarien.

Virtuelle Laufwerke sind .raw und spärlich, ähnlich wie .qcow, aber schneller.

Die Disk-Image-Formate qcow und vmdk werden ebenfalls unterstützt, aber ich denke, dass es möglicherweise LVM-Einschränkungen gibt. Ich benutze sie nicht, deshalb kann ich nicht viel dazu sagen.

LVM-Speicher wird von den VMs auf dem Knoten gemeinsam genutzt und kann ein DRBD-Gerät sein.

Bei der gemeinsamen Nutzung des VG-Speicherplatzes des Betriebssystems besteht die einzige Einschränkung in der Größe des Snapshots während der Sicherung. Hier kann dieser Wert in einer Konfigurationsdatei geändert werden, und ich sehe manchmal in den Foren, wo die Leute ihn ändern mussten, aber die Standardeinstellungen haben mir seit ein paar Jahren gute Dienste geleistet - selbst mit riesigen virtuellen Festplatten.

LVM-Speicherdetails von PVE:

http://pve.proxmox.com/wiki/Storage_Model#LVM_Groups_with_Network_Backing

So sind die VGs aufgebaut:

Volume-Gruppe "LDatastore1" mit Metadatentyp lvm2 gefunden

Volume-Gruppe "LDatastore0" mit Metadatentyp lvm2 gefunden

Volume-Gruppe "pve" mit Metadatentyp lvm2 gefunden

Dies sind meine LVs:

ACTIVE '/ dev / LDatastore1 / vm-9098-disk-1' [4,00 GB] erben

ACTIVE '/ dev / LDatastore1 / vm-7060-disk-1' [2,00 GB] erben

ACTIVE '/ dev / LDatastore1 / vm-5555-disk-1' [8.00 GB] erben

ACTIVE '/ dev / LDatastore0 / vm-4017-disk-1' [8.00 GB] erben

ACTIVE '/ dev / LDatastore0 / vm-4017-disk-2' [512.00 GB] erben

ACTIVE '/ dev / LDatastore0 / vm-7057-disk-1' [32.00 GB] erben

ACTIVE '/ dev / LDatastore0 / vm-7055-disk-1' [32.00 GB] erben

ACTIVE '/ dev / LDatastore0 / vm-6030-disk-1' [80,01 GB] erben

ACTIVE '/ dev / pve / swap' [3.62 GB] erben

ACTIVE '/ dev / pve / root' [7,25 GB] erben

ACTIVE '/ dev / pve / data' [14.80 GB] erben

Dies ist LVM auf RAID10 mit 6 Seagate Barracuda SATA-Laufwerken mit 7200 U / min:

CPU BOGOMIPS: 53199.93

REGEX / SECOND: 824835

HD-GRÖSSE: 19,69 GB (/ dev / mapper / LDatastore0-testlv)

GEPUFFERTE LESEN: 315,17 MB / Sek

Durchschnittliche Suchzeit: 7,18 ms

FSYNCS / SECOND: 2439,31

Und das ist LVM auf einer einzelnen Intel X25-E SATA SSD, dieselbe VG wie die oben genannten / dev / pve / data, auf denen VMs leben:

CPU BOGOMIPS: 53203.97

REGEX / SECOND: 825323

HD-GRÖSSE: 7,14 GB (/ dev / mapper / pve-root)

GEPUFFERTE LESEN: 198,52 MB / Sek

Durchschnittliche Suchzeit: 0,26 ms

FSYNCS / SECOND: 1867.56

NginUS
quelle