Utilisation de Xen

From Wikichris
Jump to: navigation, search

J'utilise Xen4 sur Debian6 Squeeze. Ici vous trouvez les commandes que j'ai eu l'occasion d'utiliser

Commandes

xm list #liste des machines virtuelles
xm top #monitor des machines virtuelles lancées
xm console nom_serveur #pour se connecter à la console
xm create nom_serveur #pour démarrer la machine virtuelle
xm create nom_serveur -c #pour avoir la console directe
xm shutdown nom_serveur # arret du serveur
xm destroy nom_serveur # hard shutdown
xm reboot nom_serveur # reboot du serveur

ctrl + $ #pour sortir de la console sur AZERTY
ctrl + ] #pour clavier US


Créer une machine virtuelle DOMU

Traité dans Xen sur Squeeze - Création d'une machine virtuelle

Autostart

Je ne maitrise pas encore l'autostart avec la dernière version de Xen. Voici où j'en suis.


Pour que la machine virtuelle démarre avec Xen, ajouter dans /etc/xen/$NAME.cfg

on_xend_start="start"

Pour qu'elle s'arrête proprement avec Xen, ajouter dans /etc/xen/$NAME.cfg

on_xend_stop="shutdown"



Mais si après un restart du serveur TEST1 la commande suivante nous laisse croire que la partie est gagnée

xm list -l test1 | grep on_xend

En fait le serveur s'arrête proprement avec Xen, mais ne redémarre pas...


Créer des partitions virtuelles

Exemple EXT3

Prenons l'exemple où je souhaite ajouter une partition de 20Go nommée test1-home qui sera montée en tant que /home sur la machine virtuelle TEST1

Voyons ce qui existe déjà

lvdisplay
lvscan

Créons la partition virtuelle

lvcreate vg00 -L 20G -n test1-home

Modifions le fichier /etc/xen/test1.cfg pour ajouter un 3e disque

disk        = [
               'phy:/dev/vg00/test1-disk,xvda2,w',
               'phy:/dev/vg00/test1-swap,xvda1,w',
               'phy:/dev/vg00/test1-home,xvda3,w',
           ]

Redémarrons le serveur test1

xm reboot test1

Dans le serveur TEST1 on format le nouveau disque physique

mkfs.ext3 /dev/xvda3

On monte la nouvelle partition temporairement dans /mnt

mount -t ext3 /dev/xvda3 /mnt

On y déplace tout /home

mv -f /home/* /mnt/

On modifie le fichier /etc/fstab pour y ajouter

/dev/xvda3 /home ext3 noatime,nodiratime,errors=remount-ro 0 1

On monte à son emplacement définitif

umount /mnt
mount /home

Admirez votre chef d'oeuvre

df -h

Exemple SWAP

Imaginons que je veux agrandir le Swap /dev/vg00/test1-swap sans effacer l'ancien (sinon c'est facile on supprime l'ancien et en recrée un du meme nom mais plus grand)

Créons une nouvelle partition plus grande (1Go)

lvcreate vg00 -L 1G -n test1-swap1GB

Et formatons le

mkswap /dev/vg00/test1-swap1GB 

Modifions le fichier /etc/xen/test1.cfg pour remplacer le 2e disque

disk        = [
               'phy:/dev/vg00/test1-disk,xvda2,w',
               'phy:/dev/vg00/test1-swap1G,xvda1,w',
               'phy:/dev/vg00/test1-home,xvda3,w',
           ]

Après le redémarrage, le changement devrait être pris en compte.

xm console test1
[login/passwd]
shutdown -h now

Than restart it

xm create /etc/xen/test1.cfg

If everything works properly, we can delete the previous swap

lvremove vg00/test1-swap

Agrandir partition

prenons l'exemple où on souhaite passer de 20Go à 40Go la partition /home du serveur srv-test

arreter le serveur puis

e2fsck -f /dev/vg00/srv-test-home      # vérification du volume
lvchange -an  /dev/vg00/srv-test-home
lvextend -L+20G /dev/vg00/srv-test-home # redimensionnement du volume ajoute 10Go
lvchange -ay  /dev/vg00/srv-test-home
resize2fs /dev/vg00/srv-test-home

Snapshots

Il est possible de créer des snapshots, par exemple avant une manipulation sensible sur un serveur, il sera alors possible de revenir en arrière si nécessaire.

Ces snapshots sont basés sur le principe du différentiel. C'est à dire qu'il enregistre les différences qui ont lieu depuis sa création, cela permet de remonter jusqu'à ce snapshot.

Grace à l'ingénieuse utilisation de LVM, finalement le snapshot est un disque virtuel consultable très facilement pour y récupérer quelques éléments qu'on avait perdu.

Savoir de combien dispose LVM

pvdisplay

Consulter

Pour consulter les lecteurs et snapshots actuels

lvscan

Créer

Pour créer un snapshot limité à 10Go

lvcreate --size 10G --snapshot --name nom_snapshot /dev/vg00/test1-disk

Le contenu de votre disk y restera pour la postérité. C'est un système basé sur un enregistrement des changements. Donc ce snapshot commence par 0octets et grandira jusqu'à atteindre la limite que vous fixez.

Consulter

Consulter ce snapshot

mount /dev/vg00/nom_snapshot /mnt

Tout est dans /mnt , à vous d'y récupérer ce que vous souhaitez

cd /mnt

Tout y est comme à la date de création du snapshot

Pensez à le refermer quand vous avez fini

umount /mnt

Suppression

Pour supprimer le snapshot

lvremove vg00/nom_snapshot

Restauration

Ici je décris comment restaurer une machine virtuelle dans un état précédent. Vous aviez créé un snapshot salvateur, et souhaitez restaurer votre machine grace à lui.

Commençons par arrêter la machine virtuelle

xm shutdown test1

Créer le nouveau disque virtuel qui sera utilisé par la machine virtuelle

lvcreate vg00 -L 20G -n test1-disk-new

Dans mon cas l'original était formaté en EXT3, on fait donc de même sur la cible

mkfs.ext3 /dev/vg00/test1-disk-new

La commande qui restaure votre backup (et écrase donc la cible)

dd if=/dev/vg00/nom_snapshot of=/dev/vg00/test1-disk-new

Pour voir le résultat, modifier la configuration du serveur afin d'utiliser le nouveau disque

/etc/xen/test1.cfg

disk        = [
              'phy:/dev/vg00/test1-disk-new,xvda2,w',
              'phy:/dev/vg00/test1-swap,xvda1,w',
              'phy:/dev/vg00/test1-home,xvda3,w',
          ]

Démarrons la machine

xm create /etc/xen/test1.cfg -c

Créer une archive compressée d'une partition LVM ou d'un snapshot

/bin/mount /dev/vg00/backup-temp /mnt/backup-temp
dd if=/dev/vg00/test1-disk | gzip -9 > /mnt/backup-temp/test1-disk.gz
/bin/umount /mnt/backup-temp

Restaurer à partir d'une archive compressée d'une partition LVM ou d'un snapshot

gunzip /mnt/temp/test1-disk.gz - | dd of=/dev/vg00/newtest1-disk

déplacer sur un autre serveur XEN

DD via SSH

Le plus simple est un dd via SSH a partir de la machine de destination

lvcreate vg00 -L 4G -n srv-test-disk #on choisi la même taille (4Go)
mkfs.ext4 /dev/vg00/srv-test-disk
ssh root@srv-xen.domain.com "dd if=/dev/vg00/srv-test-disk" | dd of=/dev/vg00/srv-test-disk

ou avec gzip pour aller BEAUCOUP plus vite

ssh root@srv-xen.domain.com "dd if=/dev/vg00/srv-test-disk | gzip" | gzip -dc | dd of=/dev/vg00/srv-test-disk

Sinon beaucoup plus fastidieux

Sur la machine Source

xm shutdown srv12 #ou plus proprement HALT dans la machine elle-même
lvscan #pour voir le nom, ou /etc/xen/srv12.cfg
lvdisplay /dev/vg00/srv12-root #on voit LV Size 4.00 GiB

Sur la machine cible

lvcreate vg00 -L 4G -n srv12-root #on choisi la même taille (4Go)
mkfs.ext4 /dev/vg00/srv12-root
lvcreate vg00 -L 100G -n backup-temp
mkfs.ext4 /dev/vg00/backup-temp
mkdir /mnt/temp
/bin/mount /dev/vg00/backup-temp /mnt/temp/

Sur la machine source

/bin/mount /dev/vg00/backup-images /mnt/temp/
dd if=/dev/vg00/srv12-root | gzip /mnt/temp/srv12-root.img.gz
cd
/bin/umount /mnt/temp

Sur la machine cible

cd /mnt/temp/chris
sftp srv01.gonzofamily.com
get /mnt/temp/srv12-root.img.gz
#[...]
gzip -dc /mnt/temp/chris/srv12-root.img.gz | dd of=/dev/vg00/srv12-root
lvcreate vg00 -L 128M -n srv12-swap
xm create /etc/xen/srv12.cfg

Horloges

Il est possible de garder les horloges de chaque DOMU synchronisées avec DOM0. Personnellement je préfère garder leur indépendance après avoir lu quelques forums sur le sujet. Il semble que des effets secondaires sont parfois au rendez-vous.

ntpdate

Ma façon actuelle pour synchroniser les horloges est décrite ici : Client NTP