Kako prenijeti OpenVZ 6 kontejner na KVM server bez glavobolje

Svako ko je barem jednom u životu morao da prenese OpenVZ kontejner na server sa potpunom KVM virtuelizacijom, naišao je na neke probleme:

  • Većina informacija je jednostavno zastarjela i bila je relevantna za OS koji su odavno prošli EOL ciklus
  • Za različite operativne sisteme uvijek se daju različite informacije, a moguće greške tokom migracije se nikada ne razmatraju
  • Ponekad morate imati posla s konfiguracijama koje s vremena na vrijeme ne žele raditi nakon migracije

Kada prenesete 1 server, uvijek možete nešto popraviti u hodu, ali kada prenesete cijeli klaster?

U ovom članku pokušat ću vam reći kako ispravno migrirati OpenVZ kontejner na KVM uz minimalno vrijeme zastoja i brzo rješenje za sve probleme.

Mali obrazovni program: šta je OpenVZ, a šta KVM?

Nećemo ulaziti duboko u terminologiju, već ćemo reći općenito:

OpenVZ — virtuelizacija na nivou operativnog sistema, možete je čak primeniti i na mikrotalasnoj pećnici, pošto nema potrebe za CPU instrukcijama i tehnologijama virtuelizacije na glavnom računaru.

KVM - puna virtuelizacija, koja koristi svu snagu CPU-a i može virtuelizirati bilo šta, na bilo koji način, seći po dužini i poprečno.

Suprotno uvriježenom mišljenju, u okolišu provajderi hostinga OpenVZ je preprodan, ali KVM nije. Srećom po potonje, KVM je sada preprodan jednako dobro kao i njegov brat.

Šta ćemo prenijeti?

В качестве подопытных для переноса пришлось использовать весь лес операционных систем, которые доступны на OpenVZ: CentOS (6 и 7 версии), Ubuntu (14, 16 и 18 LTS), Debian 7.

Pretpostavljalo se da većina OpenVZ kontejnera već ima neku vrstu LAMP-a, a neki čak imaju i vrlo specifičan softver. Najčešće su to bile konfiguracije sa ISPmanager-om, VestaCP kontrolnom pločom (i najčešće nisu ažurirane godinama). Njihovi zahtjevi za transfer također se moraju uzeti u obzir.

Migracija se provodi uz očuvanje IP adrese Za prenosivi kontejner, pretpostavit ćemo da je IP adresa kontejnera zadržana na virtuelnoj mašini i da će raditi bez problema.

Prije prijenosa, uvjerimo se da imamo sve pri ruci:

  • OpenVZ server, potpuni root pristup glavnoj mašini, mogućnost zaustavljanja/montaže/pokretanja/brisanja kontejnera
  • KVM server, potpuni root pristup glavnoj mašini, sa svim onim što implicira. Pretpostavlja se da je sve već konfigurisano i spremno za rad.

Počnimo sa prijenosom

Prije nego započnemo prijenos, definirajmo pojmove koji će vam pomoći da izbjegnete zabunu:

KVM_NODE - KVM host mašina
VZ_NODE - OpenVZ host mašina
CTID - OpenVZ kontejner
VM - KVM virtuelni server

Priprema za migraciju i kreiranje virtuelnih mašina.

korak 1

S obzirom da moramo negdje premjestiti kontejner, kreirat ćemo VM sa sličnom konfiguracijom kao KVM_NODE.
Važno! Создавать VM нужно именно на той операционной системе, которая сейчас крутится на CTID. Например, если на CTID установлена Ubuntu 14, то и на VM нужно ставить Ubuntu 14. Минорные версии не важны и их несовпадение не столь критично, а вот мажорные — должны быть одинаковыми.

Nakon kreiranja VM-a, ažurirat ćemo pakete na CTID-u i na VM-u (ne brkati sa ažuriranjem OS-a - ne ažuriramo ga, samo ažuriramo pakete i, ako stigne, verziju OS-a unutar glavnog verzija).

Do CentOS этот процесс выглядит безобидно:

# yum clean all
# yum update -y

И не менее безобидно для Ubuntu, Debian:

# apt-get update
# apt-get upgrade

korak 2

Instaliraj na CTID, VZ_NODE и VM korisnost rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Ništa drugo ne ugrađujemo ni tamo ni tamo.

korak 3

Zaustavljamo se CTID na VZ_NODE tim

vzctl stop CTID

Montaža slike CTID:

vzctl mount CTID

Idite u /vz/root/ folderCTID i izvršiti

mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .

Pod root-om kreirajte datoteku /root/exclude.txt - ona će sadržavati listu izuzetaka koji neće doći do novog servera

/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

Povezujemo se sa KVM_NODE i pokrenuti naše VMtako da radi i da je dostupan preko mreže.

Sada je sve spremno za transfer. Idi!

korak 4

Još uvijek pod čarolijom, nastupamo

rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/

Komanda rsync će izvršiti prijenos, nadamo se da su ključevi jasni - prijenos se vrši uz očuvanje simboličkih veza, prava pristupa, vlasnika i grupa, a enkripcija je onemogućena radi veće brzine (možete koristiti neku bržu šifru, ali ovo nije toliko važno za ovaj zadatak), kao i kompresija je onemogućena.

Nakon što završite rsync, izađite iz chroot-a (pritiskom na ctrl+d) i pokrenite

umount dev && umount proc && umount sys && cd .. && vzctl umount CTID

korak 5

Izvršimo nekoliko koraka koji će nam pomoći da pokrenemo VM nakon prijenosa sa OpenVZ-a.
Na serverima sa Systemd hajde da izvršimo komandu koja će nam pomoći da se prijavimo na običnu konzolu, na primer, preko ekrana VNC servera

mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.service

Na serverima CentOS 6 и CentOS 7 Obavezno instalirajte svježi kernel:

yum install kernel-$(uname -r)

Server se može učitati sa njega, ali nakon prijenosa može prestati raditi ili biti obrisan.

Na serveru CentOS 7 morate primijeniti malu ispravku za PolkitD, inače će se server zauvijek srušiti:

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 svim serverima, ako je instaliran mod_fcgid za Apache, izvršit ćemo malu popravku s pravima, inače će se stranice koje koriste mod_fcgid rušiti s greškom 500:

chmod +s `which suexec` && apachectl restart

И последнее, пригодится для Ubuntu, Debian дистрибутивов. Эта ОС может упасть в вечный бут с ошибкой

petlja prebrzo. malo prigušivanje izvršenja

neugodno, ali se lako popravlja, ovisno o verziji OS-a.

U Debian 9 popravak izgleda ovako:

sprovodimo

dbus-uuidgen

ako dobijemo grešku

/usr/local/lib/libdbus-1.so.3: verzija `LIBDBUS_PRIVATE_1.10.8′ nije pronađena

provjerite prisutnost LIBDBUS-a

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

ako je sve u redu, mi to radimo

cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15  libdbus-1.so.3

Ako ne pomogne, probajte drugu opciju.

Drugo rješenje problema sa malo prigušivanje izvršenja подходит практически для всех Ubuntu и Debian дистрибутивов.

Mi izvršavamo

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

I za Ubuntu 14, Debian 7 Dodatno vršimo:

adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus

rm -rf /etc/init.d/modules_dep.sh 

Что мы сделали? Восстановили messagebus, которого не хватало для запуска Debian/Ubuntu и удалили modules_dep, который пришел от OpenVZ и мешал загрузки многих модулей ядра.

korak 6

Ponovo pokrećemo VM, provjeravamo u VNC-u kako učitavanje napreduje i, idealno, sve će se učitati bez problema. Iako je moguće da će se neki specifični problemi pojaviti nakon migracije, oni su izvan okvira ovog članka i bit će ispravljeni kako se pojave.

Nadam se da su ove informacije korisne! 🙂

izvor: www.habr.com

Kupite pouzdan hosting za sajtove sa DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster