Každý, kdo alespoň jednou v životě potřeboval přenést kontejner OpenVZ na server s plnou virtualizací KVM, se setkal s některými problémy:
- Většina informací je prostě zastaralá a byla relevantní pro operační systémy, které již dávno prošly cyklem EOL
- Pro různé operační systémy jsou vždy poskytovány různé informace a nikdy se neberou v úvahu možné chyby během migrace
- Někdy se musíte potýkat s konfiguracemi, které po migraci tu a tam nechtějí fungovat
Když přenesete 1 server, můžete vždy něco opravit za běhu, ale když přenesete celý cluster?
V tomto článku se vám pokusím říci, jak správně migrovat kontejner OpenVZ na KVM s minimálními prostoji a rychlým řešením všech problémů.
Malý vzdělávací program: co je OpenVZ a co je KVM?
Nebudeme zacházet hluboko do terminologie, ale řekneme obecně:
OpenVZ — virtualizace na úrovni operačního systému, můžete ji dokonce nasadit na mikrovlnce, protože na hostitelském počítači nejsou potřeba instrukce CPU a virtualizační technologie.
KVM - plnohodnotná virtualizace, využívající veškerý výkon CPU a schopná virtualizovat cokoli, jakýmkoli způsobem, řezat to podélně i příčně.
Na rozdíl od všeobecného přesvědčení, v životním prostředí poskytovatelé hostingu OpenVZ je přeprodaný, ale KVM ne. Naštěstí pro KVM je nyní přeprodaný stejně dobře jako jeho bratr.
Co si přeneseme?
Celý les operačních systémů dostupných na OpenVZ musel být použit jako testovací subjekt pro transfer: CentOS (verze 6 a 7), Ubuntu (14, 16 a 18 LTS), Debian 7.
Předpokládalo se, že na většině kontejnerů OpenVZ již běží nějaký druh LAMP a některé mají dokonce nějaký velmi specifický software. Nejčastěji to byly konfigurace s ISPmanagerem, ovládacím panelem VestaCP (a nejčastěji roky neaktualizované). Rovněž je třeba vzít v úvahu jejich žádosti o převod.
Migrace se provádí se zachováním IP adresy U přenosného kontejneru budeme předpokládat, že IP adresa kontejneru je na virtuálním počítači zachována a bude fungovat bez problémů.
Před převodem se ujistěte, že máme vše po ruce:
- OpenVZ server, úplný root přístup k hostitelskému počítači, schopnost zastavovat/připojovat/spouštět/mazat kontejnery
- KVM server, úplný root přístup k hostitelskému počítači, se vším, co to znamená. Předpokládá se, že vše je již nakonfigurováno a připraveno k použití.
Začněme přenášet
Než zahájíme převod, pojďme definovat pojmy, které vám pomohou vyhnout se nejasnostem:
KVM_NODE - Hostitelský stroj KVM
VZ_NODE - Hostitelský stroj OpenVZ
CTID - kontejner OpenVZ
VM - KVM virtuální server
Příprava na migraci a vytváření virtuálních strojů.
Krok 1
Protože potřebujeme kontejner někam přesunout, vytvoříme VM s podobnou konfigurací jako KVM_NODE.
Důležité! Musíte vytvořit virtuální počítač na stejném operačním systému, který aktuálně běží na CTID. Například pokud CTID běží Ubuntu 14, pak ho musíte nainstalovat i na virtuální počítač Ubuntu 14. Vedlejší verze nejsou důležité a jejich nesrovnalost není tak kritická, ale hlavní verze musí být stejné.
Po vytvoření VM aktualizujeme balíčky na CTID a na VM (neplést s aktualizací OS - neaktualizujeme, aktualizujeme pouze balíčky a pokud dorazí, tak verzi OS v rámci hlavního verze).
pro CentOS Tento proces vypadá neškodně:
# yum clean all
# yum update -yA neméně neškodný pro Ubuntu, Debian:
# apt-get update
# apt-get upgradeKrok 2
Instalovat na CTID, VZ_NODE и VM nástroj rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yNic jiného tam ani tam neinstalujeme.
Krok 3
Děláme zastávku CTID na VZ_NODE tým
vzctl stop CTIDMontáž obrazu CTID:
vzctl mount CTIDPřejděte do složky /vz/root/CTID a provést
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Pod rootem vytvořte soubor /root/exclude.txt - bude obsahovat seznam výjimek, které se na nový server nedostanou
/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-ens3Připojit k KVM_NODE a spusťte náš VMaby fungoval a byl dostupný přes síť.
Nyní je vše připraveno k přenosu. Jít!
Krok 4
Stále pod kouzlem vystupujeme
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/Přenos provede příkaz rsync, doufáme, že klíče jsou jasné - přenos probíhá se zachováním symbolických odkazů, přístupových práv, vlastníků a skupin a pro větší rychlost je deaktivováno šifrování (mohli byste použít nějakou rychlejší šifru, ale to není pro tento úkol tak důležité), stejně jako komprese je zakázána.
Po dokončení rsync ukončete chroot (stisknutím ctrl+d) a proveďte
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDKrok 5
Proveďme několik kroků, které nám pomohou spustit VM po přenosu z OpenVZ.
Na serverech s Systemd proveďte příkaz, který nám pomůže přihlásit se do běžné konzole, například přes obrazovku VNC serveru
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceNa serverech CentOS 6 и CentOS 7 Nezapomeňte nainstalovat nové jádro:
yum install kernel-$(uname -r)Server lze z něj načíst, ale po přenosu může přestat fungovat nebo být smazán.
Na serveru CentOS 7 musíte použít malou opravu pro PolkitD, jinak server navždy spadne:
getent group polkitd >/dev/null && echo -e "e[1;32mpolkitd group already existse[0m" || { groupadd -r polkitd && echo -e "e[1;33mAdded missing polkitd groupe[0m" || echo -e "e[1;31mAdding polkitd group FAILEDe[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mpolkitd user already existse[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd && echo -e "e[1;33mAdded missing polkitd usere[0m" || echo -e "e[1;31mAdding polkitd user FAILEDe[0m"; }
rpm -Va polkit* && echo -e "e[1;32mpolkit* rpm verification passede[0m" || { echo -e "e[1;33mResetting polkit* rpm user/group ownership & permse[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }Na všech serverech, pokud byl nainstalován mod_fcgid pro Apache, provedeme malou opravu s právy, jinak weby používající mod_fcgid spadnou s chybou 500:
chmod +s `which suexec` && apachectl restartA v neposlední řadě to bude užitečné pro Ubuntu, Debian distribuce. Tento operační systém může způsobit trvalé spuštění s chybou.
opakování příliš rychle. trochu přiškrtit provedení
nepříjemné, ale snadno opravitelné v závislosti na verzi OS.
Na Debian 9 oprava vypadá takto:
provádíme
dbus-uuidgenpokud dostaneme chybu
/usr/local/lib/libdbus-1.so.3: verze `LIBDBUS_PRIVATE_1.10.8′ nenalezena
zkontrolujte přítomnost 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 <-- нужен этот
libdbus-1.so.3.14.16pokud je vše v pořádku, uděláme to
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Pokud to nepomůže, zkuste druhou možnost.
Druhé řešení problému s trochu přiškrtit provedení vhodné pro téměř každého Ubuntu и Debian distribuce.
Provádíme
bash -x /var/lib/dpkg/info/dbus.postinst configureA pro Ubuntu 14, Debian 7 Dále provádíme:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Co jsme udělali? Obnovili jsme sběrnici zpráv, která chyběla při spuštění. Debian/Ubuntu a odstranil modules_dep, který pocházel z OpenVZ a bránil načítání mnoha modulů jádra.
Krok 6
Restartujeme VM, zkontrolujeme ve VNC, jak načítání probíhá a v ideálním případě se vše načte bez problémů. I když je možné, že se po migraci vyskytnou některé specifické problémy, jsou nad rámec tohoto článku a budou opraveny, jakmile nastanou.
Doufám, že tyto informace jsou užitečné! 🙂
Zdroj: www.habr.com
