Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Migrer un domU Xen vers un autre serveur
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Migrer un domU Xen vers un autre serveur

Par Pierre-Yves Landuré - Dernière modification 15/07/2009 06:28

Il peut arriver qu'une application installé dans un domU Xen consomme beaucoup trop de ressource et empêche les autres domU de fonctionner correctement. La procédure à suivre est assez simple, mais nécessite un minimum de précautions. Ce guide à pour but de vous faciliter la procédure de migration d'un domU Xen vers un autre serveur. Il n'est pas parfait, mais minimise vos efforts :).

Récupération des paramètres de la machine virtuelle sur le serveur d'origine

Important : Assurez-vous que vos deux Xen se basent sur la même architecture ! Une machine virtuelle amd64 ne fonctionnera pas sur un serveur i386 (et oui, ca m'est arrivé).

Remarque : Ce guide est adapté aux VM créé à l'aide de mon guide Installer et configurer Xen sur Debian 4.0 Etch et 5.0 Lenny. Je ne garantie pas son bon fonctionnement sur une installation d'un autre type.

Remarque 2 : Ce guide n'a été testé que sur des VM en mode bridge.

En premier lieu, identifiez-vous en tant que root sur le Dom0 du serveur ou se trouve le DomU à migrer.

Une fois identifié, renseignez le nom du serveur cible :

TARGET_SERVER=xen.mon-serveur-tres-tres-lointain.com

Nous créons une clef RSA temporaire sans mot de passe de façon à pouvoir automatiser les transferts vers notre serveur cible le temps de ce guide :

/usr/bin/ssh-keygen -t rsa -N "" -f ${HOME}/.ssh/temporary_id_rsa
/usr/bin/ssh-copy-id -i ${HOME}/.ssh/temporary_id_rsa.pub root@${TARGET_SERVER}

Renseignez le nom de la machine virtuelle que vous souhaitez migrer :

VM_NAME=my-xen-vm

Récupérez le nom du groupe de volumes utilisé par votre configuration Xen :

LVM_VG=$(/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //')

Nous récupérons le nom du fichier de configuration de la machine virtuelle :

VM_CONFIG=$(find /etc/xen -name "${VM_NAME}.cfg")

Nous copions le fichier de configuration ainsi trouvé sur le serveur cible :

/usr/bin/scp -i ${HOME}/.ssh/temporary_id_rsa ${VM_CONFIG} root@${TARGET_SERVER}:/etc/xen

Nous recréons les volumes logiques du domU migré sur le serveur cible (le mot de passe demandé est celui du serveur cible):

SHELL_COMMAND="LVM_VG=\$(/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //')"
/usr/bin/find /dev/${LVM_VG} -name "${VM_NAME}-*" | \
{
while read LV_DEV; do
LV_NAME=$(/usr/bin/basename ${LV_DEV})
LV_SIZE=$(/sbin/lvdisplay ${LV_DEV} | /bin/grep "LV Size" | /usr/bin/cut --characters=26- | /bin/sed -e 's/ \(.\)B/\1/')
SHELL_COMMAND="${SHELL_COMMAND};/sbin/lvcreate -n ${LV_NAME} -L ${LV_SIZE} ${LVM_VG}"
done
SHELL_COMMAND="${SHELL_COMMAND};/usr/bin/test -e /dev/${LVM_VG}/${VM_NAME}-swap && /sbin/mkswap /dev/${LVM_VG}/${VM_NAME}-swap"
 /usr/bin/ssh -i ${HOME}/.ssh/temporary_id_rsa root@${TARGET_SERVER} "${SHELL_COMMAND}"
}

Une fois les volumes logiques créés, nous lançons le transfert des données. Pour ce faire, nous commançons par éteindre la machine virtuelle :

/usr/sbin/xm shutdown ${VM_NAME}

Attendez que la machine s'éteigne, vous pouvez vérifier son statut à l'aide de la commande :

xm list

Lancez la copie du contenu des volumes logiques :

DISTANT_VG=$(/usr/bin/ssh -i ${HOME}/.ssh/temporary_id_rsa root@${TARGET_SERVER} "/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //'")
/usr/bin/find /dev/${LVM_VG} -name "${VM_NAME}-*" | /bin/egrep -v 'swap$' | \
{
while read LV_DEV; do
LV_NAME=$(/usr/bin/basename ${LV_DEV})
 /bin/dd if=${LV_DEV} | /usr/bin/ssh -i ${HOME}/.ssh/temporary_id_rsa root@${TARGET_SERVER} "/bin/dd of=/dev/${DISTANT_VG}/${LV_NAME}"
done
}

Remarque : Il est possible d'utiliser bzip2 ou gzip pour compresser les flux avant de les envoyer sur le réseau, mais ce n'est vraiment utile que sur les bandes passantes faibles, le temps gagné pour le transfert étant perdu lors de la compression si vous disposez d'une bande passante importante.

Une fois les volumes logiques transférés, je vous recommande d'ajuster le DomU à son nouveau Dom0 :

/usr/bin/ssh -i ${HOME}/.ssh/temporary_id_rsa root@${TARGET_SERVER} "
LVM_VG=\$(/bin/grep lvm /etc/xen-tools/xen-tools.conf | /bin/sed -e 's/lvm = //')
MOUNT_POINT=\$(/bin/mktemp -d)
/bin/mount /dev/\${LVM_VG}/${VM_NAME}-disk \${MOUNT_POINT}
/bin/cp -a /etc/xen-tools/skel/* \${MOUNT_POINT}
/bin/umount \${MOUNT_POINT}
/bin/mount /dev/\${LVM_VG}/${VM_NAME}-var \${MOUNT_POINT}
/bin/cat /etc/xen-tools/ssh-keys/xen-upgrade-rsa.pub > \${MOUNT_POINT}/home/xen-upgrade/.ssh/authorized_keys
/bin/umount \${MOUNT_POINT}"

Vous pouvez maintenant vous connecter au serveur distant et tenter de démarrer la machine virtuelle migrée. Il est possible que vous deviez modfiier le fichier de configuration de la VM pour l'adapter aux noyaux disponibles dans le nouveau Dom0.

Important : Suivant votre configuration, vous pouvez souhaitez modifier l'adresse recevant les e-mail du compte. Cette modification doit se faire dans le fichier /etc/aliases du DomU migré.

Nous avons fini notre migration, nous supprimons la clef temporaire que nous avons mis en place précédemment :

KEY=$(/bin/cat ${HOME}/.ssh/temporary_id_rsa.pub | /bin/sed -e 's|/|\\/|'g)
/usr/bin/ssh -i ${HOME}/.ssh/temporary_id_rsa root@${TARGET_SERVER} "/bin/sed -i -e '/^${KEY}$/d' ${HOME}/.ssh/authorized_keys"
/bin/rm ${HOME}/.ssh/temporary_id_rsa
/bin/rm ${HOME}/.ssh/temporary_id_rsa.pub

Remerciements

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio