Jak přenést kontejner OpenVZ 6 na server KVM bez bolesti hlavy

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í, že mezi poskytovateli hostingu se OpenVZ stane přeprodávaným, ale KVM nikoli – naštěstí pro druhé jmenované není KVM nyní přeprodávaný o nic hůř než jeho bratr.

Co si přeneseme?

Jako testovací subjekty pro přenos jsme museli použít celou doménu operačních systémů, které jsou na OpenVZ dostupné: 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 probíhá při zachování IP adresy přenášeného kontejneru, budeme předpokládat, že IP, kterou kontejner měl, je uložena na VM 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č v operačním systému, který aktuálně běží na CTID. Pokud je například na CTID nainstalováno Ubuntu 14, musí být na virtuálním počítači nainstalováno Ubuntu 14. Menší verze nejsou důležité a jejich nesrovnalost není tak kritická, ale hlavní verze by měly 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 -y

A neméně neškodné pro Ubuntu a Debian:

# apt-get update
# apt-get upgrade

Krok 2

Instalovat na CTID, VZ_NODE и VM nástroj rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Nic jiného tam ani tam neinstalujeme.

Krok 3

Děláme zastávku CTID na VZ_NODE tým

vzctl stop CTID

Montáž obrazu CTID:

vzctl mount CTID

Př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-ens3

Př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 CTID

Krok 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/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

Na 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 restart

A poslední věc je užitečná pro distribuce Ubuntu a Debian. Tento operační systém může narazit do věčného spouš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-uuidgen

pokud 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.16

pokud 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.3

Pokud to nepomůže, zkuste druhou možnost.

Druhé řešení problému s trochu přiškrtit provedení Vhodné pro téměř všechny distribuce Ubuntu a Debian.

Provádíme

bash -x /var/lib/dpkg/info/dbus.postinst configure

A 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 messagebus, který chyběl ke spuštění Debian/Ubuntu, a odstranili jsme modules_dep, který pocházel z OpenVZ a narušoval 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

Přidat komentář