Debian OpenVZ

Aus Wiki
Zur Navigation springen Zur Suche springen

Einleitung

OpenVZ erstellt mehrere isolierte, sichere virtuelle Umgebungen (Virtual Environments, kurz VEs) auf einem einzigen physischem Server, sorgt so für eine bessere Serverausnutzung und stellt sicher, dass Programme (Applikationen) nicht miteinander in Konflikt geraten. Jede VE arbeitet und verhält sich genau wie ein eigenständiger Server; VEs können unabhängig voneinander neu gestartet werden und haben Root-Zugriff, Benutzer, IP-Adressen, Speicher, Prozesse, Dateien, Programme, Systembibliotheken und Konfigurationsdateien.

Im Vergleich zu Virtuellen Maschinen von VMware bzw Virtualbox oder zu Para-Virtualisierungstechnologien wie Xen bietet OpenVZ weniger Flexibilität, was die Auswahl von Gast-Betriebssystemen betrifft: sowohl Gast- als auch Host-Betriebssystem muss Linux sein (obwohl verschiedene Linux-Distributionen in verschiedenen VEs eingesetzt werden können). Andererseits bietet die Technologie von OpenVZ bessere Leistungsfähigkeit, Skalierbarkeit, dynamische Ressourcenverwaltung und einfachere Administration. Laut der OpenVZ-Website (www.openvz.org) beträgt der Virtualisierungsaufwand nur 1–3 % der gesamten Systemleistung.

OpenVZ ist Basis von Virtuozzo, des kommerziellen Produkts aus dem Hause Parallels (ehem. SWsoft Inc.). OpenVZ ist unter der GPL Version 2 lizenziert.

OpenVZ besteht aus Kernel und Werkzeugen auf Benutzerebene.

Für weitere Details zu OpenVZ siehe http://de.wikipedia.org/wiki/OpenVZ


Installation OpenVZ

32Bit-Linux:

apt-get install linux-image-openvz-686

64Bit-Linux:

apt-get install linux-image-openvz-amd64

OpenVZ-Tools:

apt-get install vzctl vzquota

Sysctl anpassen, um Netzwerkzugriff für die VE's zu ermöglichen:

vi /etc/sysctl.conf

Folgende Einstellungen vornehmen (teilweise Optionen ändern und teilweise neu einfügen):

[...]
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
[...] 

Nach dem Ändern des Konfigfiles, die Änderungen übernehmen:

sysctl -p 

Server neustarten:

reboot

Nach dem Reboot:

uname -r

Die angezeigte Kernelversion muss openvz enthalten z.B. 64Bit:

2.6.26-2-openvz-amd64

bzw. 32Bit Kernel:

2.6.26-2-openvz-686


Installation WebVZ

WebVZ ist eine webbasierte Konfigurations- und Managementoberfläche, die via Webbrowser bedient wird. WebVZ benötigt die Scriptsprache Ruby on Rails.

apt-get install ruby rubygems libsqlite3-ruby sqlite3 irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 rdoc1.8
gem install -v=2.1.0 rails

Download von WebVZ:

cd /usr/local
wget http://dfn.dl.sourceforge.net/sourceforge/webvz/webvz.2.0.tar.gz
tar xvfz webvz.2.0.tar.gz
mv webvz.2.0 webvz
cd webvz

WebVZ benötigt noch einige Tools und Directories an bestimmten Stellen im Dateisystem, die mittels symbolischer Links angelegt werden:

ln -s /var/lib/vz /vz
ln -s /usr/bin/irb1.8 /usr/bin/irb
mkdir /etc/sysconfig
ln -s /etc/vz/conf /etc/sysconfig/vz-scripts 

Startscript:

vi /etc/init.d/webvz

Folgende Zeilen einfügen

#!/bin/sh
### BEGIN INIT INFO
# Provides:          webvz
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Should-Start:      $syslog
# Should-Stop:       $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start/stop webvz
# Description:       Start/stop WebVZ a Web Interface for OpenVZ
### END INIT INFO
START="yes"
DAEMON=/usr/local/webvz/script/server
RUBY=/usr/bin/ruby
OPTIONS=""
PIDFILE=/var/run/webvz.pid
USER="root"
GROUP="root"

if [ "$START" != "yes" ]; then
   echo "To enable Webinterface edit $1 and set START=yes"
   return 0
fi

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

start()
{
  echo -n "Starting WebVZ..."

  #Check, if running
  start-stop-daemon --chuid $USER --group $GROUP --background --make-pidfile --pidfile $PIDFILE \
  --start --test --exec $RUBY $DAEMON -- $OPTIONS  > /dev/null
  if [ "$?" -ne 0 ]; then
     echo "   [already running]"
     return 1
  fi

  #Start
  start-stop-daemon --chuid $USER --group $GROUP --background --make-pidfile --pidfile $PIDFILE \
  --start --exec $RUBY $DAEMON -- $OPTIONS > /dev/null
  if [ "$?" -ne 0 ]; then
     echo "    [failed]"
     return 1
  fi
  echo "    [ok]"
  return 0
} 

stop()
{
  echo -n "Stopping WebVZ..."
  kill -9 `cat $PIDFILE`
  rm -f $PIDFILE
  echo "    [ok]"
  return 0
}

case "$1" in
  start)
       start
       ;;
  stop)
       stop
       ;;
  restart|reload)
       stop
       start
       ;;

  *)
      echo "Usage: $0 {start|stop|restart|reload}"
      exit 3
esac

Startscript ausführbar machen

chmod +x /etc/init.d/webvz

Beim Systemstart ausführen:

update-rc.d webvz defaults


Funktionscheck und Passwort ändern

WebVZ starten:

/etc/init.d/webvz start

Webbrowser öffnen und Adresse http://IP_Des_Server:3000. Die Startseite von WebVZ sollte sich öffnen.

  • Button Login anklicken
  • Einloggen mit Username=admin und Password=admin123
  • Reiter Users anklicken
  • Button Change Password in der Zeile Administrator/admin admin anklicken
  • Zweimal das gewünschte Passwort eingeben und Button Change Passoword anklicken


Templates

Allgemeines zu Templates

Für die Installation einer Virtual Environment (Linux-Gast) sind Templates erforderlich. Es wird nicht direkt eine Linux-Distribution von CD-ROM oder DVD installiert wie bei anderen Virtualisierungslösungen. Ein Template enthält sämtliche Files, die für den Betrieb eines Gastes erforderlich sind in Form eines gapackten TAR-Archives. Die Installation eines Gastes besteht lediglich daraus, dieses Template zu entpacken und in den Zielordner zu kopieren. Die Installation verläuft also deutlich schneller als via Installationsmedium. Die Gastdistribution muß nicht die selbe wie die Hostdistribution sein, So kann also z.B. eine Centos- oder SUSE- Distribution als Gast auf einem Debian Server eingesetzt werden. Neben reinen Templates für das Betriebssystem gibt es Templates die bereits bestimmte Anwendungen vorinstalliert haben, z.B. Webserever incl. Mediawiki oder ähnliches. OpenVZ Templates können direkt von der OpenVZ-Wiki-Page heruntergeladen werden (http://wiki.openvz.org/Download/template/precreated).

Bulbgraph.png Hinweis:
Unter einem 64Bit Server können sowohl 32Bit als auch 64Bit Gäste verwendet werden. Unter einem 32Bit Server können dagegen lediglich 32Bit Templates verwendet werden.

Beispiel-Templates

Templates Download

cd /var/lib/vz/template/cache
wget PATH_TO_TEMPLATE (siehe obige Beispiele bzw. Links zu weiteren Templates)
z.B. für Debian-5.0 OpenVZ 32Bit Template:
wget http://download.openvz.org/template/precreated/debian-5.0-x86.tar.gz


VE einrichten

  • Webbrowser öffnen und http://IP_Des_Server:3000 eingeben.
  • Button Login anwählen
  • Als User Admin einloggen
  • Reiter Containers anklicken
  • New Container anklicken
  • Eine Maske in folgender Form erscheint:
WebVZ1.png
  • Folgende Eingaben vornehmen:
    • Owner: kann auf Choose Owner verbleiben
    • Opernating System Template: Das gewünschte Template aus der Dropdown-Liste auswählen
    • Configuration File Name: Bestimmt die Zuweisung von verfügbaren Ressourcen: basic (mittelmäßge) / light (geringe) / unlimited (unlimitiert). Die Ressourcen können später beliebig erhöht/verkleinert werden.
    • Container ID: ID muß größer 100 und eindeutig sein.
    • Name: Bezeichnung der VE (OpenVZ interne Bezeichnung)
    • IP Adress: IP-Adresse der VE
    • Hostname: Hostname der neuen VE
    • Nameserver: IP-Adresse des DSL-Routers, damit die VE Internetzugriff hat
    • Enable booting on startup: Soll die VE zusammen mit dem Server gestartet werden?
    • Start up the container after creating it: Soll VE sofort nach dem anlegen gestartet werden?
    • Root Password (optional): Root Passwort der VE. Ein Passwort sollte hier unbedingt vergeben werden, sonst kann sich der User root nicht per SSH (z.B. Putty) einloggen.
  • Wenn alle Eingaben korrekt sind, create anwählen


VE verwalten

Verwaltung öffnen

  • Webbrowser öffnen und http://IP_Des_Server:3000 eingeben.
  • Button Login anwählen
  • Als User Admin einloggen
  • Reiter Containers anklicken
  • Eine Übersicht aller definierter Container wird angezeigt:
WebVZ2.png
  • die Container ID (Cnt ID) der zu verwaltenden VE anklicken
  • Folgende Maske erscheint:
WebVZ3.png


Running Processes

Mit Hilfe des Menüpunktes Running Processes kann eine Liste aller laufenden Processe angezeigt werden.


Services

Eine Auflistung aller Dienste (Startscripte unter /etc/init.d/ )erscheint. Sämtliche Dienste können gestartet, neugestartet oder angehlaten werden WebVZ4.png


Run Command

Dient zum Ausführen eines Kommando's auf der Virtuellen Maschine.


Monitor Resources

WebVZ5.png

Die Resourcen sind bei OpenVZ sehr detailliert einzustellen und die aktuell belegten Resourcen können in diesem Menüpunkt visualisiert werden.

Held: aktuell belegte Menge
Max Held: Maximal belegte Menge
Barrier: Menge, ab der der Failcounter inkrementiert wird
Limit: max. mögliche Menge.
Failcnt: Überschreitet eine Resource die Barrier bzw. erreicht das Limit wird der Failcounter hochgezählt. Tritt dieser Fall ein, sollten die jeweiligen Resourcen erhöht werden bzw. versucht werden, den Resourcen-Verbrauch in der VE zu senken.


Booting Options

Hier kann eingestellt werden, ob die Virtual Machine beim Starten des Servers automatisch mit gestartet werden soll, oder nicht.


Basic Network Config

Hier kann der Hostname, die IP-Adresse und der Nameserver geändert werden.


Resources: Adv.Network Config / CPU Management / Memory / Misc/

Parameter Erklärung Barrier/Limit
Adv. Network Config
Number of TCP Sockets Max. Anzahl erlaubter TCP-Sockets (TCP-Verbindungen) Barrier=Limit
TCP Send Buffer Size Sende-Pufferspeicher (lowmemory) zum Anlegen der TCP-Sockets (Limit-Barrier)>2,5KB*NUM TCP Sockets
TCP Recieve Buffer Size Empfangs-Pufferspeicher (lowmemory) zum Anlegen der TCP-Sockets (Limit-Barrier)>2,5KB*NUM TCP Sockets
Other Socket Buffer Size Sende-Pufferspeicher (lowmemory) zum Anlegen der lokalen und UDP-Sockets (Limit-Barrier)>2,5KB*NUM OTHER Sockets
UDP Recieve Buffer Size Empfangs-Pufferspeicher (lowmemory) zum Anlegen der lokalen und UDP-Sockets Barrier=Limit
Number of Other Sockets Max. Anzahl erlaubter NON.TCP-Sockets (UDP, loakele Sockets, ...) Barrier=Limit
Disk Management
Disk Space (KByte) Verfügbarer Festplattenplatz Limit>=Barrier
Disk Inodes Anzahl Inodes Limit>=Barrier
Quota Time TBD TBD
CPU Management
Guaranteed Minimum CPU Barrier=1000; Limit N/A
Number of processes Maximale Anzahl erlaubter Prozesse und Threads Barrier=Limit
Memory
Kernel Memory Size Nicht swappbarer Kernelspeicher. Dieser Speicher liegt im ersten Gigabyte (lowmemory) des Hauptspeicher des Hostsystems Limit=Barrier+10%
Number of Locked Pages Nicht swappbare Prozess Speicherseiten *). Diese Seiten sind im Kernelspeicher enthalten Limit=Barrier bzw. Limit>Barrier.
Private VM Pages Max. Speicherseitenzahl *), die der VE zur Verfügung steht. Es kann aber je nach Auslastung des Speichers des Hostsystems nicht garantiert werden, dass die VE diese Menge an Speicher auch zur Verfügung gestellt werden kann. Limit>Barrier
Number of shm Pages Shared Memory Seiten *). Diese sind in Private VM Pages enthalten Limit=Barrier
Physical Pages Speicherseiten, die von allen VE's gemainsam genutzt werden (z.B. shared Libraries). Dies ist reiner Informationsparameter und kein Konfigurationsparameter Barrier=0;Limit auf MAX_ULONG *)
VM Guar Pages Maximale garantierte Zahl an Speicher Pages *). Dieser Speicher steht der VM minimal zur Verfügung. Maximaler Speicher siehe Private VM Pages Limit=MAX_ULONG *)
OOM Guar Pages Sollte dem Hostsystem der Hauptspeicher ausgehen, wird versucht Prozesse der VE's zu killen um Speicher freizugeben. Dies geschieht bis zum Wert OOM Guar Pages. D.h. es werden nur soviele Prozesse gekillt, dass der VE noch mindestens die Menge OOM Guar Pages Speicherseiten *) zur Verfügung steht. only Barrier used; Limit unspecified
Disk Cache Size Filesystem Caches Limit>Barrier
Misc
Number of files lock Anzahl gelockter Files Limit > Barrier
Number of PTYs Max. Anzahl von Terminal Sessions Limit=Barrier
Number of Open Files Max. Anzahl geöffneter Dateien Limit=Barrier
Number of SIGINFO Maximale Anzahl SigInfo Strukturen. Max. 1024 Siginfo Strukturen erlaubt Limit=Barrier
Number of IPTENT Anzahl möglicher netfilter (Iptables) Einträge Limit=Barrier


Bulbgraph.png Hinweis:
  • Memory Page: 1 Speicherseite entspricht 4KB Speicher.
  • MAX_ULONG: 32 Bit-System: 2147483647 bzw. 64 Bit-System: 9223372036854775807


Kommandozeilentools

vzctl

Im Prinzip stellt die Weboberfläche OpenVZ ein komfortables Frontend für vzctl dar. D.h. alle Funktionen und Befehle von OpenVZ können auch mittels des Kommandozeilentools vzctl ausgeführt werden. Mittels vzctl können sogar weitergehende Konfiguratioseinstellungen der Virtuellen Gäste vorgenommen werden, die mittels OpenVZ nicht verfügbar sind. z.B.

vzctl set Cnt ID --capability sys_time:on --save

um einem Gast Zugriff auf die HW-Uhr des Hostsystems zu gestatten. Dies ist z.B. nötig, um einen NTP-Server in einem Virtuellen Gast zu betreiben.


vzlist

Mittels vzlist ist es möglich eine Auflistung aller definierter virtueller Maschinen ausgegeben.