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 da će među hosting provajderima OpenVZ postati preprodavan, ali KVM neće - na sreću potonjeg, KVM je sada preprodat ništa gore od svog brata.

Šta ćemo prenijeti?

Kao testirani subjekti za prijenos morali smo koristiti cijelu šumu operativnih sustava koji su dostupni na OpenVZ-u: CentOS (6 i 7 verzije), Ubuntu (14, 16 i 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 vrši uz očuvanje IP adrese prenesenog kontejnera; pretpostavićemo da je IP koji je kontejner imao sačuvan na VM-u 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! Morate kreirati VM na operativnom sistemu koji trenutno radi na CTID-u. Na primjer, ako je Ubuntu 14 instaliran na CTID, onda Ubuntu 14 mora biti instaliran na VM. Manje verzije nisu važne i njihova neslaganja nije toliko kritična, ali glavne verzije bi trebale biti iste.

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

Za CentOS ovaj proces izgleda bezopasno:

# yum clean all
# yum update -y

I ništa manje bezopasno za Ubuntu i 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/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

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

I zadnja stvar je korisna za Ubuntu i Debian distribucije. Ovaj OS se može srušiti u vječno pokretanje sa greškom

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 Pogodno za gotovo sve Ubuntu i Debian distribucije.

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 

Šta smo uradili? Vratili smo sabirnicu poruka, koja je nedostajala za pokretanje Debian/Ubuntua, i uklonili modules_dep, koji je došao iz OpenVZ-a i ometao učitavanje mnogih modula kernela.

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

Dodajte komentar