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í, 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 -y

A neméně neškodný pro Ubuntu, 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/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.service

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 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-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ěř každého Ubuntu и Debian distribuce.

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

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster