Virtualisierung mit Solaris
Artikel erschienen in Swiss IT Magazine 2007/18
Während man bei der x86-Plattform erst jetzt so richtig auf den Geschmack der Virtualisierung kommt, kennen Solaris-Administratoren dieses Feature schon länger. Denn die SPARC-Plattform bietet wie IBMs Power Unterstützung für Virtualisierung und dynamische Partitionierung. Aber auch das Betriebssystem (Open)Solaris selber bietet Softwarelösungen, die plattformunabhängig verfügbar sind.
Mit Solaris 10 wurde eine neue einfache Virtualisierungslösung eingeführt, die Solaris Zonen. Auf eine bestehende Solaris-10-Installation können dank der Zonen mit einfachen Mitteln weitere Solaris-Instanzen installiert und hochgefahren werden. Dabei wird nicht die Hardware virtualisiert, sondern ein spezieller Kern geladen, welcher eine definierte Umgebung für die Zonen-Prozesse bietet. Alle Prozesse einer Zone werden vom Kern in der Mutterzone verwaltet.
Die Ressourcenverteilung (Speicher, Scheduling, Prozessorzuteilung, Netzwerkzuteilung usw.) erfolgt dabei über den Mutterkern. Deshalb sind von der Mutterzone aus gesehen auch sämtliche Prozesse aus einer Zone sichtbar. Umgekehrt sind aber die in der Zone laufenden Prozesse komplett von der Mutterzone abgeschottet: Man sieht sozusagen in eine Zone hinein, aber nicht heraus.
Das Einrichten und Verwalten von Zonen ist denkbar einfach. Gerade mal drei Befehle sind dafür notwendig:
- zonecfg zum Einrichten und Konfigurieren einer Zone.
- zoneadm zum Verwalten einer Zone (Initialisierung, Laden, Neustarten).
- zlogin zum Einloggen auf der Konsole der Zone. Dazu steht mit zonename noch ein Befehl zur Verfügung, mit dem sich der Name der aktuellen Zone ausgeben lässt.
Als Beispiel soll eine Zone «myzone» eingerichtet werden. Als Dateisystem für die Zone wird der Pfad /zonen/myzone verwendet. Die Zone soll beim Booten des Servers automatisch hochgefahren werden und alle Pakete, die in der Mutterzone unter /opt installiert sind, sollen automatisch in der Zone mit installiert werden.
# zonecfg -z myzone
myzone: No such zone configured. Use 'create' to begin configuring a new zone.
zonecfg:myzone> create
zonecfg:myzone> set
zonepath=/zonen/myzone
zonecfg:myzone> set
autoboot=true
zonecfg:myzone> add
inherit-pkg-dir
zonecfg:myzone:inherit-pkg-dir> set dir=/opt
zonecfg:myzone:inherit-pkg-dir> end
Damit ist die Zone grundsätzlich eingerichtet. Nun gilt es, das Netzwerk zu konfigurieren.
zonecfg:myzone> add net
zonecfg:myzone:net> set address=131.188.3.30
zonecfg:myzone:net> set physical=ge1
zonecfg:myzone:net> end
Für myzone wird das physikalische Netz-Interface ge1 verwendet, welches die IP-Adresse 131.188.3.30 bekommt.
Nun wird noch überprüft, ob bei der Einrichtung kein Fehler gemacht wurde (verify), bevor die Änderung abgespeichert wird und die Einrichtung beendet werden kann.
zonecfg:myzone> verify
zonecfg:myzone> commit
zonecfg:myzone> exit
Die Konfigurationsdateien der Zone liegen unter /etc/zones. Man sollte aber davon absehen, sie manuell zu modifizieren. Änderungen sollten nur mit dem Befehl zonecfg vorgenommen werden.
Jetzt ist die Zone konfiguriert, aber noch nicht initialisiert, was sich mit zoneadm list -cv überprüfen lässt. Initialisiert wird die Zone mit zoneadm -z myzone install. Nach einigen Minuten sind die benötigten Dateien kopiert, und die Zone kann nun mit zoneadm -z myzone boot gestartet werden. Dann kann man sich auf die Konsole der neu gebooteten Zone einloggen: zlogin -C -e@ myzone. Die Kommandozeilen-Switch -C steht für Konsole und
-e@ definiert @ als Escape Character, mit dem man aus der Konsole wieder raus kommt.
Neu eingezogen in das letzte Solaris-10-Release sind die sogenannten LX Branded Zones, kurz BrandZ. Sie ermöglichen, auf einem Solaris-Server eine Linux-Instanz in einer Zone zu betreiben, die sonst eigentlich nur Solaris unterstützt. Aktuell unterstützt BrandZ nur die x86-Plattform und die Linux-Distributionen CentOS 3.x sowie Red Hat Enterprise Linux 3.x in ihrer 32-Bit-Ausgabe.
Technisch funktionieren Branded Zones so, dass Solaris die System Calls des Gastbetriebssystems in jene von Solaris umsetzt. Ausserdem werden die Spezial-Devices
/dev und /proc emuliert und zur Verfügung gestellt. Diese Art der Emulation über an das Muttersystem weitergereichte System Calls verwenden auch andere Produkte, etwa der Windows-Emulator WINE. Auch hier stellt WINE die Windows-Systemaufrufe nach und reicht sie an das eigentliche Betriebssystem weiter. Der Geschwindigkeitsverlust zu nativ laufendem Linux soll laut Sun bei etwa 4 Prozent liegen.
Linux Branded Zones sind laut Sun erst der Anfang, da es mit dieser Methode auch möglich ist, andere Gastbetriebssysteme in einer Zone zu betreiben. Man darf also gespannt sein, was die Zukunft, insbesondere die vor kurzem beschlossene Kooperation mit Microsoft, noch bringen wird.
Ebenfalls neu hat Sun als weitere Virtualisierungslösung Logical Domains (LDOM) eingeführt. Basierend auf Suns Ultrasparc T1 respektive T2 kann ein Sun-Server mit bis zu 32 (entspricht der Anzahl der Threads, welche die Maschine parallel verarbeiten kann) LDOMs versehen werden. LDOMs funktionieren ähnlich wie Xen mit einem Hypervisor, der den Zugriff auf die Ressourcen für die einzelnen Instanzen regelt. Allerdings sitzt diese bei Sun sehr dünne Softwareschicht in einem PROM auf dem Motherboard und wird nicht über das Wirtssystem geladen.
Um LDOMs nutzen zu können, wird Solaris 10 ab Release 11/06 und eine aktuelle PROM-Firmware auf dem Server benötigt. Die Einrichtung der LDOMs selbst erfolgt dann über ein installiertes Solaris, welches gleichzeitig als Kontroll-Domäne fungiert. Diese entscheidet über Partitionierung der Ressourcen und deren Zuteilung sowie Kommunikationskanäle zwischen den einzelnen LDOMs. Weiter muss es eine sogenannte I/O-Domäne geben, die aber in der Regel mit der Service-Domäne identisch ist. Diese Domäne hat direkten Zugriff auf die Hardware. Alle weiteren LDOMs greifen über diese dann auf die Devices zu.
Die Einrichtung von LDOMs ist, wie die der Zonen, recht einfach: Als erstes muss das SUNWldm Paket installiert sein, der Logical Domain Manager.
# pkgadd SUNWldm
# svcadm ldmd start
# ldm list
Damit sieht man, dass bislang nur eine Domäne installiert ist – die Service-Domäne. Werden dieser Domäne Ressourcen (zuerst Festplatte, dann Netzwerk) zugewiesen, wird die Service-Domäne gleichzeitig zur I/O-Domäne.
# ldm add-vdiskserver primary-vds0 primary
# ldm add-vswitch
net-dev=e1000g0 primary-vsw0 primary
Mit dem folgenden Befehl werden die Konsolen der zukünftigen LDOMs auf die Ports zwischen 5000 bis 5100 gelegt:
# ldm add-vconscon port-range=5000-5100 primary-vcc0 primary
Als nächstes werden die Ressourcen zugewiesen.
# ldm set-vcpu 4 primary
# ldm set-mem 1g primary
Die primäre Domäne erhält damit 4 CPUs (eigentlich Threads) und 1 GB Speicher.
Mit ldm add-config initial wird die Konfiguration im Service-Prozessor des Servers gespeichert. Beim Neustart wird diese Domäne darauf initialisiert und der Rechner wie konfiguriert als 4-Prozessor-Maschine mit 1 GB Hauptspeicher geladen. Im nächsten Schritt kann das erste Gastsystem initialisiert werden:
# ldm create domain1
# ldm set-vcpu 2 domain1
# ldm set-mem 2g domain1
# ldm add-vnet vnet1 primary-vsw0 domain1
# ldm add-vdiskserverdevice /dev/dsk/DEVICE vol1@primary-vds0
# ldm add-vdisk vdisk0 vol1@primary-vds0 domain1
Als Gastsystem wurde eine 2-Prozessor-Maschine mit 2 GB Hauptspeicher konfiguriert, der vnet1 als Netzwerkinterface und DEVICE als Festplatte zugewiesen wurden. Mit folgendem Befehl wird die virtuelle Maschine «gebunden» und ist ab sofort benutzbar. Anschliessend wird die Konfiguration noch unter dem Namen «domain1» gespeichert.
# ldm bind domain1
# ldm add-config domain1
Die «domain1» kann dann mit ldm start domain1 geladen werden. Nachher kann man sich mit der Console verbinden und eine normale Installation (CD-ROM, Jumpstart) starten.
Logical Domains (LDOMs)
Gregor Longariva (longariva@softbaer.de) ist Solaris-Administrator am Rechenzentrum der Universität Erlangen-Nürnberg und Spezialist für unixoide Betriebssysteme.