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 upgradekorak 2
Instaliraj na CTID, VZ_NODE и VM korisnost rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yNišta drugo ne ugrađujemo ni tamo ni tamo.
korak 3
Zaustavljamo se CTID na VZ_NODE tim
vzctl stop CTIDMontaža slike CTID:
vzctl mount CTIDIdite 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-ens3Povezujemo 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 CTIDkorak 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.serviceNa 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-uuidgenako 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.16ako 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.3Ako 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 configureI 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
