Quiconque a déjà eu besoin de migrer un conteneur OpenVZ vers un serveur avec une virtualisation complÚte KVM a rencontré certains problÚmes.
- La plupart des informations sont simplement obsolÚtes et étaient pertinentes pour des cycles EOL de systÚmes d'exploitation déjà dépassés.
- Selon les systÚmes d'exploitation, des informations différentes sont fournies, et les erreurs potentielles lors de la migration ne sont jamais abordées.
- Il arrive parfois de devoir gérer des configurations qui refusent de fonctionner aprÚs la migration.
Lorsque vous migrez un serveur, il est toujours possible de corriger des choses en cours de route, mais que faire lors de la migration d'un cluster entier ?
Dans cet article, je vais essayer d'expliquer comment migrer correctement un conteneur OpenVZ vers KVM avec un temps d'arrĂȘt minimal et une solution rapide Ă tous les problĂšmes.
Un petit point de référence : qu'est-ce qu'OpenVZ et qu'est-ce que KVM ?
Sans entrer dans les détails techniques, disons-le en termes généraux :
OpenVZ â virtualisation au niveau du systĂšme d'exploitation, qui peut mĂȘme ĂȘtre mise en place sur un micro-ondes, car il n'est pas nĂ©cessaire d'avoir des instructions CPU et des technologies de virtualisation sur l'hĂŽte.
KVM â virtualisation complĂšte, utilisant toute la puissance du CPU et capable de virtualiser tout ce que vous voulez, de la maniĂšre que vous voulez, sans limites.
Contrairement Ă l'opinion rĂ©pandue selon laquelle dans l'environnement fournisseurs d'hĂ©bergement OpenVZ il y a une surcharge, tandis que KVM n'en a pas â heureusement pour ce dernier, KVM est dĂ©sormais tout aussi sujet Ă une surcharge que son homologue.
Que allons-nous migrer ?
Pour cette migration, nous avons dĂ» utiliser toute la gamme des systĂšmes d'exploitation disponibles sur OpenVZ : CentOS (versions 6 et 7), Ubuntu (14, 16 et 18 LTS), Debian 7.
On supposait que la plupart des conteneurs OpenVZ faisaient dĂ©jĂ tourner un LAMP quelconque, et certains avaient mĂȘme des logiciels trĂšs spĂ©cifiques. Le plus souvent, il s'agissait de configurations avec les panneaux de contrĂŽle ISPmanager, VestaCP (et souvent, non mis Ă jour depuis des annĂ©es). Il est nĂ©cessaire de prendre en compte leurs demandes de migration.
La migration se fait avec la conservation du adresses IP conteneur transférable, nous allons supposer que l'IP du conteneur est maintenue sur la VM et fonctionnera sans problÚme.
Avant la migration, assurons-nous que nous avons tout en main :
- Un serveur OpenVZ, un accĂšs root complet Ă la machine hĂŽte, la possibilitĂ© d'arrĂȘter/mounter/dĂ©marrer/supprimer des conteneurs.
- Un serveur KVM, un accĂšs root complet Ă la machine hĂŽte, avec toutes les implications. On suppose que tout est dĂ©jĂ configurĂ© et prĂȘt Ă l'emploi.
Nous allons commencer le transfert
Avant de commencer le transfert, définissons les termes pour éviter toute confusion :
KVM_NODE â machine hĂŽte KVM
VZ_NODE â machine hĂŽte OpenVZ
CTID â conteneur OpenVZ
VM â serveur virtuel KVM
Préparation au transfert et création de machines virtuelles.
Ătape 1
Comme nous devons transférer le conteneur quelque part, nous allons en créer un VM avec une configuration similaire sur KVM_NODE.
Attention ! La VM doit ĂȘtre créée sur le mĂȘme systĂšme d'exploitation qui tourne actuellement sur CTID. Par exemple, si CTID utilise Ubuntu 14, alors la VM doit Ă©galement utiliser Ubuntu 14. Les versions mineures ne sont pas critiques, mais les versions majeures doivent ĂȘtre identiques.
AprĂšs la crĂ©ation de la VM, nous mettrons Ă jour les paquets sur CTID et sur la VM (ne pas confondre avec la mise Ă jour du systĂšme d'exploitation â nous ne mettons Ă jour que les paquets et, si disponible, la version de l'OS dans la limite de la version majeure).
Pour CentOS, ce processus semble inoffensif :
# yum clean all
# yum update -yEt tout aussi inoffensif pour Ubuntu, Debian :
# apt-get update
# apt-get upgradeĂtape 2
Installer sur CTID, VZ_NODE et VM outil rsync:
CentOS :
# yum install rsync -yDebian, Ubuntu :
# apt-get install rsync -yNous n'installons rien d'autre, ni lĂ , ni ici.
Ătape 3
Nous procĂ©dons Ă l'arrĂȘt CTID sur VZ_NODE la commande
vzctl stop CTIDMonter l'image CTID:
vzctl mount CTIDNous accédons au dossier /vz/root/CTID et exécutons
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Sous chroot, nous crĂ©ons le fichier /root/exclude.txt â il contiendra la liste des exclusions qui ne seront pas transfĂ©rĂ©es sur le nouveau serveur.
/boot
/proc
/sys
/tmp
/dev
/var/lock
/etc/fstab
/etc/mtab
/etc/resolv.conf
/etc/conf.d/net
/etc/network/interfaces
/etc/networks
/etc/sysconfig/network*
/etc/sysconfig/hwconf
/etc/sysconfig/ip6tables-config
/etc/sysconfig/kernel
/etc/hostname
/etc/HOSTNAME
/etc/hosts
/etc/modprobe*
/etc/modules
/net
/lib/modules
/etc/rc.conf
/usr/share/nova-agent*
/usr/sbin/nova-agent*
/etc/init.d/nova-agent*
/etc/ips
/etc/ipaddrpool
/etc/ips.dnsmaster
/etc/resolv.conf
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-ens3Nous nous connectons à KVM_NODE et lançons notre VM, afin qu'il fonctionne et soit accessible sur le réseau.
Tout est maintenant prĂȘt pour le transfert. Allons-y !
Ătape 4
Toujours sous chroot, nous exécutons
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/La commande rsync effectuera le transfert, espĂ©rons que les options sont claires â le transfert se fait en prĂ©servant les symlinks, les autorisations, les propriĂ©taires et les groupes, et le chiffrement est dĂ©sactivĂ© pour une vitesse accrue (un algorithme de chiffrement plus rapide aurait pu ĂȘtre utilisĂ©, mais ce n'est pas si crucial dans le cadre de cette tĂąche), tout comme la compression est dĂ©sactivĂ©e.
AprÚs l'achÚvement de rsync, nous sortons de chroot (en appuyant sur ctrl+d) et exécutons
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDĂtape 5
Nous allons effectuer quelques actions qui nous aideront à démarrer la VM aprÚs le transfert depuis OpenVZ.
Sur les serveurs avec Systemd , nous exécutons la commande qui nous aidera à nous connecter à la console normale, disons via l'écran VNC du serveur.
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceSur les serveurs CentOS 6 et CentOS 7 , nous devons absolument installer un nouveau noyau :
yum install kernel-$(uname -r)Le serveur peut ĂȘtre dĂ©marrĂ© Ă partir de celui-ci, mais aprĂšs le transfert, il peut cesser de fonctionner ou ĂȘtre supprimĂ©.
Sur le serveur CentOS 7 il est nécessaire d'appliquer un petit correctif pour PolkitD, sinon le serveur sera bloqué dans un boot infini :
getent group polkitd >/dev/null && echo -e "e[1;32mLe groupe polkitd existe dĂ©jĂ e[0m" || { groupadd -r polkitd && echo -e "e[1;33mGroupe polkitd manquant ajoutĂ©e[0m" || echo -e "e[1;31mĂchec de l'ajout du groupe polkitde[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mL'utilisateur polkitd existe dĂ©jĂ e[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "Utilisateur pour polkitd" polkitd && echo -e "e[1;33mUtilisateur polkitd manquant ajoutĂ©e[0m" || echo -e "e[1;31mĂchec de l'ajout de l'utilisateur polkitde[0m"; }
rpm -Va polkit* && echo -e "e[1;32mVérification des rpm polkit* réussiee[0m" || { echo -e "e[1;33mRéinitialisation de la propriété utilisateur / groupe des rpm polkit* et des permissionse[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }Sur tous les serveurs, si mod_fcgid a été installé pour Apache, nous allons effectuer un petit correctif concernant les droits, sinon les sites utilisant mod_fcgid rencontreront une erreur 500 :
chmod +s `which suexec` && apachectl restartEt enfin, ça sera utile pour les distributions Ubuntu et Debian. Ce systÚme d'exploitation peut rencontrer un boot infini avec une erreur
looping too fast. throttling execution a little
c'est désagréable, mais ça se corrige facilement, selon la version du systÚme d'exploitation.
Sur Debian 9 le correctif est le suivant :
on exécute
dbus-uuidgensi nous recevons une erreur
/usr/local/lib/libdbus-1.so.3: version `LIBDBUS_PRIVATE_1.10.8âČ not found
nous vérifions la présence de LIBDBUS
ls -la /lib/x86_64-linux-gnu | grep dbus
libdbus-1.so.3 -> libdbus-1.so.3.14.15
libdbus-1.so.3.14.15 <-- c'est celui qu'il nous faut
libdbus-1.so.3.14.16si tout est en ordre, nous exécutons
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Si cela ne fonctionne pas â nous essayons la seconde option.
La seconde option pour résoudre le problÚme de throttling execution a little convient pratiquement à toutes les distributions Ubuntu et Debian.
Nous exécutons
bash -x /var/lib/dpkg/info/dbus.postinst configureAllowed Logout URLs Ubuntu 14, Debian 7 en plus, nous exécutons :
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Que faisons-nous ? Nous avons restaurĂ© messagebus, qui manquait au dĂ©marrage de Debian/Ubuntu et avons supprimĂ© modules_dep, qui venait d'OpenVZ et gĂȘnait le chargement de nombreux modules du noyau.
Ătape 6
Nous redĂ©marrons la VM, vĂ©rifions dans VNC comment se passe le dĂ©marrage et idĂ©alement â tout devrait dĂ©marrer sans problĂšme. Bien que, certaines problĂšmes spĂ©cifiques puissent apparaĂźtre aprĂšs la migration â mais cela dĂ©passe le cadre de cet article et se corrigent au fur et Ă mesure de leur survenue.
J'espĂšre que ces informations seront utiles ! đ
Source : habr.com
