Virtualisierung
Version 25 (dvs, 07/04/2011 04:48 pm)
| 1 | 10 | mj0 | h1. Virtualisierung |
|---|---|---|---|
| 2 | 4 | Anonymous | |
| 3 | 1 | dvs | Virtualisierung auf X86 ist inzwischen ein weit fortgeschrittenes Konzept. Sie erlaubt es verschiedene Betriebssysteme gleichzeitig auf einem SLX-Client ablaufen zu lassen. Einerseits lässt sich so ein Windows-Desktop als alternative grafische Oberfläche anbieten oder andererseits voneinander abgeschottet im Hintergrund Cluster-Rechnen zur Nutzung freier CPU-Ressourcen betreiben. |
| 4 | 1 | dvs | |
| 5 | 21 | dvs | Es gibt verschiedene Virtualisierungslösungen, deren Integration via [[OpenSLX-Plugins]] erfolgt. |
| 6 | 1 | dvs | |
| 7 | 22 | dvs | * [[VMware]]-Workstation und -Player (bis Version 7.X) |
| 8 | 25 | dvs | * [[VirtualBox]] (incl. aktueller Version) |
| 9 | 22 | dvs | * [[Xen]] (beta, ziemlich komplex wegen spezieller Kernels) |
| 10 | 22 | dvs | * [[QEMUKVM]] (beta) |
| 11 | 1 | dvs | |
| 12 | 10 | mj0 | h2. Windows-Desktop und andere Systeme auf OpenSLX-Workstations |
| 13 | 1 | dvs | |
| 14 | 10 | mj0 | Die Steuerung erfolgt generell mittels XML-Datei, die im selben Verzeichnis, wie die @*.vmdk@, bei VMware, oder entsprechenden Image-Typen liegt. Die Integration erfolgt in erster Linie mittels [[vmchooser|VM-Chooser-Plugin]]. Hier wird beispielsweise das Floppy-Image zur Weitergabe der Konfiguration (@config.xml@) eingebunden. |
| 15 | 1 | dvs | |
| 16 | 20 | mj0 | Eine vom Image-Administrator (Tool oder Admin) erstellte Datei wird via [[VMchooser]] und [[VMware]]-Plugin zum Windows-Login-Tool weitergeleitet und auf diesem Wege ergänzt. Das Windows-Login-Tool bekommt die modifizierte XML-Datei in einem virtuellen Diskettenlaufwerk bereit gestellt (dieses könnte je nach Virtualisierungsumgebung noch angepasst werden). Diese wird beim Login in der Windowsumgebung ausgewertet um bei Bedarf folgende Aufgaben auszuführen: |
| 17 | 1 | dvs | |
| 18 | 10 | mj0 | * Einbinen des Home-Laufwerks des Benutzers |
| 19 | 10 | mj0 | * Installation und Einbinden der verfügbaren Drucker |
| 20 | 10 | mj0 | * Einbinden der Scannern |
| 21 | 10 | mj0 | * Einbinden von Shared-Laufwerken |
| 22 | 1 | dvs | |
| 23 | 10 | mj0 | Nach dem Login werden folgende Funktionen (abhängig von den Einstellungen in der XML-Datei) zur Verfügung gestellt: |
| 24 | 1 | dvs | |
| 25 | 1 | dvs | * Anzeige des freien/belegten Speicherplatzes auf dem Homelaufwerk |
| 26 | 1 | dvs | * Verknüpfungen auf dem Desktop zu allen eingebundenen Laufwerken |
| 27 | 1 | dvs | * Anzeige des Druckerkontostandes mit einem Direktlink zum Aufladen des Druckerkontos |
| 28 | 1 | dvs | |
| 29 | 20 | mj0 | Die Vorlage-XML-Datei kann auf der Plugin-Seite von [[VMchooser#XML-Datei]] angesehen werden. |
| 30 | 23 | dvs | |
| 31 | 23 | dvs | h2. Redo-Dateien der Virtualisierer |
| 32 | 23 | dvs | |
| 33 | 23 | dvs | Da alle Clients auf eine gemeinsame Image-Datei einer bestimmten eingerichteten virtuellen Maschine zugreifen, müssen die während des Laufs entstehenden Differenzdaten (Blöcke des nur lesbaren Images, die sich im Betrieb ändern) irgendwo abgelegt werden. Das passiert bei Diskless-Clients im Hauptspeicher. Da dieser ziemlich endlich ist, stürzt bei Überlauf die Maschine ab oder beschwert sich über zu knappen verfügbaren Restspeicher für die Differenzdaten. |
| 34 | 23 | dvs | |
| 35 | 23 | dvs | h3. Lokale Festplatte nutzen |
| 36 | 23 | dvs | |
| 37 | 23 | dvs | Wenn eine lokale Festplatte in der Maschine installiert ist, kann diese durch das Festlegen einer Partition mit einer ID44 nach _/tmp_ eingebunden werden. Das passiert automatisch im Stage3. Diese Partition wird immer beim Hochfahren der Maschine neu formatiert, um zu verhindern, dass sie durch alte Daten überlaufen kann. Sinnvollerweise hat man dazu dann im Vorlagensystem die XFS-Tools installiert, da das Formatieren größerer Partitionen mit Ext2/3/4 länger dauert. Diese Variante sollte eine recht hohe Performance aufweisen, da nur auf lokale Geräte geschrieben wird (die sonst auch nicht weiter genutzt würden) und kein zusätzlicher Traffic auf dem Netzwerk anfällt. |
| 38 | 23 | dvs | |
| 39 | 23 | dvs | h3. Linear RAID aus lokalem RAM und Remote Blockdevice |
| 40 | 23 | dvs | |
| 41 | 23 | dvs | Ein komplett festplattenloses System kann seine Daten nur im RAM ablegen oder über das Netz auf Hintergrundspeicher in einem File- oder Blockdevice-Server schreiben. Eine Möglichkeit zu verhindern, dass eine Standardsitzung einer virtuellen Maschine sofort das Netzwerk in Anspruch nimmt, was sich insbesondere bei einem "Massenstart" von virtuellen Maschinen doppelt negativ auswirken würde. Dann würden einerseits gerade alle angeforderten Blöcke der virtuellen Festplatte des startenden VM-Gasts gelesen werden und sich ändernde Blöcke gleichzeitig wieder weggeschrieben. Dieses Problem lässt sich durch ein spezielles Blockdevice umgehen, welches aus einem kleineren lokalen RAM-Teil und einem größeren Hintergrundsteil besteht, wobei letzterer auf einem ausreichend leistungsfähigen Server liegt. |
| 42 | 23 | dvs | |
| 43 | 23 | dvs | h4. Das lokale RAM-Blockdevice |
| 44 | 23 | dvs | |
| 45 | 23 | dvs | Das TempFS auf den Clients, welches sich direkt für die Differenzdateien eignet, lässt sich nicht direkt als virtuelles Blockdevice verwenden. Deshalb muss eine leere Datei erzeugt werden, die dann via *losetup* zu einem Blockdevice wird. Dieses lässt sich dann mittels *mdadm* zu einem linearen RAID mit dem Hintergrundspeicher auf dem Server (siehe dazu weiter unten) verbinden. |
| 46 | 23 | dvs | <pre> |
| 47 | 23 | dvs | dd if=/dev/zero of=1024MB count=1 seek=1024 bs=1MB |
| 48 | 23 | dvs | losetup /dev/loopN /tmp/1024MB |
| 49 | 23 | dvs | mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/loop0 /dev/XXXXX |
| 50 | 23 | dvs | mkfs.xfs -f /dev/md0 # mkfs.ext2 -m0 /dev/md0 |
| 51 | 23 | dvs | </pre> |
| 52 | 23 | dvs | Ein Einsatz von LVM2 anstelle des einfacheren RAIDs verbietet sich, da es deutlich komplexer vom Setup ist (und damit einen höheren Zeitbedarf hat) und deutlich mehr IO auf den Dateien beim Setup generiert. Damit ist auch keine strikte Trennung mehr gegeben, dass kleine Datenmengen keinen Netzwerk-Traffic verursachen. |
| 53 | 23 | dvs | |
| 54 | 23 | dvs | Als Filesystem bietet sich typischerweise XFS an, da es sehr schnell formatiert. Ext2 geht bei kleineren Gerätetypen auch. Filesysteme sollten so getuned werden, dass sie wenig Inodes anlegen, da die Zahl der Dateien in diesem speziellen Verzeichnis recht überschaubar bleibt. Filesystem-Reserve für den Superuser ist ebenfalls überflüssig. |
| 55 | 23 | dvs | |
| 56 | 23 | dvs | h4. NBD-COW als Remote Blockdevice |
| 57 | 23 | dvs | |
| 58 | 23 | dvs | Eine recht performante Möglichkeit ist der Einsatz von NBD (Standardbestandteil des Kernels und einer jeden Distribution). Hier kann einfach eine leere Datei der maximal zugesicherten Größe, beispielsweise 4-8 GByte angelegt werden, die dann im Copy-on-Write-Modus an die angeschlossenen Clients exportiert wird. |
| 59 | 23 | dvs | <pre> |
| 60 | 23 | dvs | dd if=/dev/zero of=mdstuff count=1 seek=4095 bs=1MB |
| 61 | 23 | dvs | nbd-server 5100 /srv/nbd/mdstuff -c |
| 62 | 23 | dvs | </pre> |
| 63 | 23 | dvs | Das Elegante der Lösung liegt darin, dass die Datei durch das Seek lediglich ein knappes Megabyte belegt. Die Diff-Dateien, die für jeden sich verbindenden Client angelegt werden, können nur bis zur Größe dieser Datei wachsen, so dass sich der maximale Speicherbedarf auf dem Server leicht kalkulieren lässt. Zudem werden die Diff-Files wieder gelöscht, wenn der Client sich sauber wieder abmeldet. Damit besteht nur ein Bedarf für die tatsächlich von den Clients angeforderte Zusatzspeichermenge, wenn der lokale RAM-Anteil überläuft. |
| 64 | 23 | dvs | |
| 65 | 23 | dvs | Die Clients binden den NBD-Server wie gewohnt ein und erhalten dann ein lokales Blockdevice _/dev/nbdN_. |
| 66 | 23 | dvs | |
| 67 | 23 | dvs | h4. Loopback-File-Blockdevice |
| 68 | 23 | dvs | |
| 69 | 23 | dvs | Eine Alternative wäre die Nutzung eines beschreibbaren NFS, auf dem eine Blockdevice-Datei angelegt wird. Diese könnte ebenso, wie die anderen Beispiele leer angelegt werden und gibt mit ihrer Größe die maximale Größe vor, die ein Client belegen kann. Diese Datei könnte vom Client ad-hoc angelegt und am Ende wieder gelöscht werden. |
| 70 | 23 | dvs | <pre> |
| 71 | 23 | dvs | dd if=/dev/zero of=4096MB count=1 seek=4095 bs=1MB |
| 72 | 23 | dvs | losetup /dev/loopN+1 4096MB |
| 73 | 23 | dvs | </pre> |
| 74 | 23 | dvs | Der Overhead und die Feinsteuerung wären vermutlich mit NFS etwas aufwändiger als mit dem NBD. Es müsste überwacht werden, dass man für die Clients ein Quota im Auge behält, da sonst der NFS-Share recht voll werden könnte. |
| 75 | 24 | dvs | |
| 76 | 24 | dvs | h4. Einsatz auf dem Client |
| 77 | 24 | dvs | |
| 78 | 24 | dvs | Auf dem Client sollte das Filesystem auf dem RAID für jede VM-Session neu generiert werden, da sonst die Dateien nicht mehr an den Anfang geschrieben werden und damit u.U. sofort wieder Netzwerkverkehr erzeugen. Da die VM durch einen normalen User gestartet wird und die meisten genannten Programme privilegierten Zugang benötigen, sind einige weitergehende Überlegungen notwendig. So liesse sich beispielsweise *sudo* verwenden, um ganz bestimmte Programme zu authentifizieren. |