Introduction

Xen est un système de virtualisation OpenSource. Les premières versions ne pouvaient accueillir que des OS libres dans la mesure où il était nécessaire d’en modifier le noyau.

Les versions récentes des micro-processeurs AMD et Intel permettent la prise en charge d’une partie des instructions de virtualisation directement par le micro-processeur.

De ce fait, il est maintenant possible de faire tourner des OS comme Windows sur un hôte Xen installé sous Linux.

Terminologie

Domaine xen
Une instance de Xen. Elle peut être privilégiée (Dom0) ou non privilégiée (DomU)
Dom0
C’est l’instance Xen privilégiée. elle représente le système hôte dans lequel les instances DomU vont tourner. Seul le Dom0 a un accès plein et entier au matériel.
DomU
C’est l’instance non privilégiée de Xen ou machine virtuelle. « DomU » est parfois traduit comme Domaine Utilisateur pour indiquer qu’il ne dispose d’aucun privilège d’accès au matériel.
DRBD
Distributed Redundant Block Device. Système de réplication de périphériques en mode block (disques durs) par le réseau. Cette technologie est très souvent utilisée dans les architectures « HA » (Haute Disponibilité)
LVM
Logical Volume manager. Couche d’abstraction permettant une gestion à la fois plus souple et plus puissante des partitions d’un disque dur. Il est possible de modifier la taille d’une partition, réaliser des snapshots, …

Choix du stockage

Il existe plusieures manières d’installer les machines virtuelles:

Fichiers image
Le « disque » est virtualisé dans un fichier, un peu comme VMWare ou VirtualBox. Simple à mettre en place et à gérer, ce n’est cependant pas très souple d’utilisation et cela induit surtout une perte de performance.
NFS
Beaucoup plus souple d’utilisation, ceci n’est concevable que pour un hébergement en volume (et avec un très bon réseau). Dans le cas contraire, stocker les informations en distant ne présente pas beaucoup d’intérêt.
LVM
C’est naturellement une solution plus intéressante car elle allie les performances d’un disque local à la souplesse intrinsèque de LVM. Par exemple, cela permet d’ajouter de l’espace disque presque à la volée. En revanche, pas de redondance.
LVM + DRBD
Les avantages de LVM, la redondance en plus ! Évidemment, vous aurez besoin de 2 serveurs pour assurer la réplication des datas.

Disposant de 2 PC, j’ai choisi d’utiliser DRBD associé à LVM. Configuré en primary/primary, DRBD donne l’avantage de pouvoir migrer les machines virtuelles « à chaud ». Utile lorsqu’on doit mettre le node à jour.

Autre avantage, cela vous permet de répartir les machines virtuelles entre les 2 nodes, chacuns des nodes assurant le backup de l’autre. Pas de problème de synchronisation de data, DRBD s’en charge pour vous.

Le fonctionnement de notre système sera le suivant:

  • Chaque machine virtuelle sera installée sur un volume LVM du Dom0. L’installation du DomU en lui-même peut-être faite en LVM (ou pas). Cela n’a pas d’importance: la ressource DRBD est vue comme un disque par le DomU.
  • Chaque volume logique LVM sera associé à une ressource DRBD et répliqué. Il y aura donc autant de ressources DRBD que de machines virtuelles.
  • Les machines virtuelles seront réparties sur les 2 nodes. Attention: gardez bien à l’esprit que vous devez garder de la place (mémoire et CPU notamment) sur chaque node pour accueillir, même provisoirement, les DomU du vis-à-vis.

Configuration de LVM

Il s’agit tout d’abord de partitionner votre disque et de créer les PV. Par exemple, pour un Dom0 Xen, je crée 2 PV:

  • un PV appelé System d’une cinquantaine de GigaOctet. Ce volume accueillera le système, en « LVM over RAID ».
  • un PV appelé XenHosting qui occupe le reste du disque. Il accueillera les DomU

Configuration de DRBD

Pour les raisons de clarté, la configuration de DRBD est déplacée: DRBD: Distributed Replicated Block Device

Installation de Xen

La version de Xen dans GNU/Debian Lenny est la 3.2. L’installation de l’hyperviseur Xen est facile:

Installation de Xen
apt-get install xen-hypervisor xen-utils
Installation du noyau Xen pour le Dom0
apt-get install linux-image-2.6.18-6-xen-amd64

Une fois le noyau installé, redémarrez votre serveur sur le nouveau noyau. Une fois connecté, vérifiez que Xen est bien démarré:

List des DomX démarrés
xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Domain-0                                     0  3756     4     r-----     35.3

Configuration du réseau

Par défaut, pas de réseau ! Au moins, on est peinard…

Là encore, plusieures solutions, pas de jaloux:

Réseau bridgé
Solution la plus simple, chaque machine virtuelle est vue comme unique sur le réseau car ayant sa propre adresse IP.
Réseau routé
Solution un peu plus évoluée, le Dom0 se transforme en routeur. Chaque machine virtuelle possède toujorus sa propre adresse IP.
Réseau NATé avec VLAN
Le Dom0 est le seul à être vu du réseau. C’est une peu comme chez soi avec un modem ADSL: on peut avoir plusieurs machine qui accèdent à Internet, mais elles y accéderont avec la même adresse IP.

Nous n’utiliserons que le réseau bridgé, plus simple. Mais encore faut-il l’activer:

/etc/xen/xend-config.sxp
##
# To bridge network traffic, like this:
#
# dom0: ----------------- bridge -> real eth0 -> the network
#                            |
# domU: fake eth0 -> vifN.0 -+

...

# Configuration par défaut:
#(network-script network-dummy)
# Notre configuration:
(network-script network-bridge)

Puis:

Redémarrer Xend
/etc/init.d/xend restart Restarting XEN control daemon: xend.

et enfin:

Vérification de la configuration réseau
ifconfig
eth0      Link encap:Ethernet  HWaddr 00:XX:XX:XX:XX:XX
          inet adr:192.168.0.1  Bcast:192.168.0.255  Masque:255.255.255.0
          adr inet6: fe80::2XX:XXXX:XXXX:XXXX/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10466 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6558 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:9560501 (9.1 MiB)  TX bytes:900269 (879.1 KiB)

lo        Link encap:Boucle locale
          inet adr:127.0.0.1  Masque:255.0.0.0
          adr inet6: ::1/128 Scope:Hôte
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

peth0     Link encap:Ethernet  HWaddr 00:XX:XX:XX:XX:XX
          adr inet6: fe80::2XX:XXXX:XXXX:XXXX/64 Scope:Lien
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:10604 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6710 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:9575961 (9.1 MiB)  TX bytes:919563 (898.0 KiB)
          Interruption:18

Si peth0 apparaît, c’est gagné. Le reste tient du réseau bridgé classique, je ne m’étendrai pas dessus.

Configuration de la machine virtuelle

Dans ce document, nous n’installerons que des machines virtuelles en mode HVM.

Ceci permet d’avoir de « vraies » machines indépendantes, mais également de pouvoir installer une machine sous un autre système d’exploitation que celui du Dom0 (Windows par exemple).

Chaque machine virtuelle doit avoir son propre fichier de configuration.

Fichier de configuration générique: /etc/xen/xps-101.cfg
#
# HVM configuration file
# Linux
#
################################

kernel       = '/usr/lib/xen-3.2-1/boot/hvmloader'
device_model = '/usr/lib/xen-3.2-1/bin/qemu-dm'
builder      = 'hvm'
memory       = '1024'
vcpus        = '1'
cpus         = '1'
localtime    = 0
serial       = 'pty'

#
# Parametrage disque
# boot on floppy (a), hard disk (c) or CD-ROM (d) or Network (n)
boot         = 'dcn'
disk         = [
		'phy:/dev/drbd1,ioemu:hda,w'
	       ]

#
# Parametrage reseau
#
vif          = [ 
		  'bridge=eth0,type=ioemu,mac=00:16:3E:01:01:65,ip=192.168.0.101'
	       ]

#
# Comportement
#
on_poweroff  = 'destroy'
on_reboot    = 'restart'
on_crash     = 'restart'

extra = "xencons=tty clocksource=jiffies notsc pci=noapci"

#
# Parametrage VNC pour l'installation et/ou la recup
#
#vfb = [ 'type=vnc,vnclisten=127.0.0.1,vncdisplay=1' ]
vfb = [ 'type=vnc,vnclisten=0.0.0.0,vncdisplay=1' ]
keymap       = "fr"

#
# Parametrage de la machine virtuelle
#
name         = 'xps-101'
hostname     = 'xps-101.mydomain.com'

Une fois la configuration achevée, vous pouvez démarrer la machine virtuelle et l’installer comme vous feriez sur un PC classique.

Contrôler une machine virtuelle

Le contrôle d’une machine virtuelle est relativement sommaire. Il consiste en quelques opérations de base:

  • Création / Démarrage
  • Arrêt « normal » / Destruction (arrêt « électrique »)
  • Migration vers un autre node

Création

Création d’une machine virtuelle
xm create xps-101.cfg Using config file "/etc/xen/xps-101.cfg".
Started domain xps-101

Arrêt

Redémarrage
xm restart xps-101
Arrêt Soft
xm shutdown xps-101
Arrêt Hard
xm destroy xps-101

Migration

La migration est un peu plus complexe. En effet, comme on utilise DRBD, on aura besoin, par exemple, du nom du noeud en vis-à-vis.

Xen doit également être configuré pour pouvoir communiquer avec son vis-à-vis. Il faut adapter le fichier/etc/xen/xend-config-xenapi.sxp

Activation du serveur Xen pour les migration
(xend-relocation-server yes)

Un redémarrage de xend est nécessaire pour que le changement soit pris en compte.

Ceci fait, il devient possible de migrer la machine virtuelle à l’aide de la commande:

Migration à chaud d’une instance Xen
xm migrate xps-101 192.168.0.2 --live

Où 192.168.0.2 est l’IP du node en vis-à-vis.

Maintenance

On peut, pour autant que Xen et la machine virtuelle soient correctement configurés, accéder à la console d’une machine virtuelle à partir du node (utile pour dépanner lorsqu’on a merdé le firewall 😉 ).

Connection à la console d’une machine virtuelle
xm console xps-101 Debian GNU/Linux 5.0 xps-101 ttyS0
xps-101 login:

Pour quitter, utiliser CTRL+ALTGr+]

Source et références

Sites officiels

Xen
  • //www.xen.org/
DRBD
  • //www.drbd.org/
GNU/Debian Linux
  • //www.debian.org/

Documentation et Howto

Xen
  • //www.howtoforge.com/debian_etch_xen_3.1
  • //www.labo-linux.org/articles-fr/premiere-approche-de-xen/installation-de-xen
  • //www.xen-tools.org/software/xen-tools/examples.html
  • //wiki.debian.org/Xen
  • https://asi.insa-rouen.fr/asipedia/index.php/Xen
  • https://help.ubuntu.com/community/Xen
  • //www.howtoforge.com/debian_etch_xen_from_debian_repository
  • //howto.landure.fr/gnu-linux/debian-4-0-etch/installer-et-configurer-xen-sur-debian-4-0-etch
  • //www.hostinggeek.com/
  • //www.projet-plume.org/fiche/xen
  • //virtualization4xceptn.wordpress.com/2008/09/15/xen-how-to-define-the-boot-order-for-hvm-in-vmcfg/
  • //etbe.coker.com.au/2007/07/27/a-support-guide-to-xen/
LVM
  • //www.morot.fr/spip.php?article35
  • //linux.developpez.com/lvm/#L4.2
  • //clx.anet.fr/spip/article.php3?id_article=237
DRBD
  • //www.drbd.org/users-guide/

Trucs et astuces

Noyau Dom0 Lenny
  • //lists.debian.org/debian-devel/2008/07/msg00312.html
  • //kernel-archive.buildserver.net/debian-kernel/waldi/xen-extra/pool/main/l/linux-2.6/
UDEV dans DomU
  • //codewut.de/xen-on-32bit-os-with-8gb-ram
  • //lists.xensource.com/archives/html/xen-users/2006-09/msg00284.html
Support du HVM
  • //wiki.xensource.com/xenwiki/HVM_Compatible_Processors

Divers et dépannage

Accès aux partitions LVM d’une machine virtuelle
  • //blogs.simc.be/simc/index.php/post/2009/01/22/Kpartx-pour-aller-un-peut-plus-loin-avec-LVM
  • //cedric-tintanet.developpez.com/tutoriels/linux/sauvegarde-virt/
DomU brutal test
  • //www.cyberciti.biz/faq/understanding-bash-fork-bomb/
Création miroirs
  • //smhteam.info/wiki/index.linux.php5?wiki=CreerUnMirroirDebianLocal
  • //www.debian.org/mirror/ftpmirror.fr.html
  • //www.debian.org/mirror/list-full#FR
  • //howto.landure.fr/gnu-linux/ubuntu-edgy-eft/developpement-et-serveurs/creation-dun-mirroir-ubuntu-local-a-laide-de-apt-mirror
  • //doc.ubuntu-fr.org/tutoriel/creer_un_miroir_de_depot_local
Keymap setting for VNC
  • //linux.derkeiler.com/Mailing-Lists/Debian/2007-11/msg01128.html