Igaüks, kes on kunagi pidanud migreerima OpenVZ konteineri tõeliselt virtuaalsesse KVM serverisse, on silmitsi seisnud mitmete probleemidega:
- Enamik teavet on lihtsalt vananenud ja tundub olevat asjakohane juba ammu möödunud EOL-i tsükli jaoks.
- Erinevate operatsioonisüsteemide kohta on alati erinevat teavet ning migreerimise võimalikke vigu arutatakse kunagi.
- Mõnikord tuleb tegeleda konfigureerimisega, mis migratsiooni pärast ei tööta.
Kui migreerida üks server, on alati võimalik midagi jooksu pealt parandada, aga mis siis, kui migreeritakse terve klaster?
Selles artiklis püüan selgitada, kuidas migreerida OpenVZ konteinerit KVM-ile minimaalsete seisakute ja kiirete probleemilahendustega.
Lühike ülevaade: mis on OpenVZ ja mis on KVM?
Ärme süvene terminoloogiasse, vaid ütleme üldiselt:
OpenVZ — virtualiseerimine operatsioonisüsteemi tasemel, mida saab käivitada isegi mikrolaineahjus, kuna ei ole vaja CPU juhiseid ja virtualiseerimiseks tehnoloogiaid hostmasinas.
KVM — täiuslik virtualiseerimine, mis kasutab kogu CPU võimsust ja suudab virtualiseerida kõike, nagu soovitakse, lõigates nii edasi-tagasi.
Vastupidiselt levinud arvamusele, et hõlvab teenusepakkujate OpenVZ, samas kui KVM ei ole — õnneks viimasel ajal on KVM samuti hakanud ületama oma konkurente.
Mida me hakkame ümber kolima?
Experimentideks ümberkolimiseks kasutasime kogu avatud süsteemide metsa, mis on saada OpenVZ-l: CentOS (6 ja 7 versioon), Ubuntu (14, 16 ja 18 LTS), Debian 7.
Oletati, et suurem osa OpenVZ konteineritest töötavad juba mingisuguse LAMP-i peal, ja mõnedel on isegi väga spetsiifiline tarkvara. Enamasti olid need konfiguratsioonid ISPmanageri, VestaCP juhtpaneeliga (ja tavaliselt mitte aastaid uuendatud). Tuleb arvestada ka nende ümberkolimise nõudmisi.
Migratsioon toimub IP-aadressid ümberkantava konteineri säilitamisega, oletame, et IP, mis oli konteineril, jääb VM-ile ja töötab probleemideta.
Enne kolimist veendume, et meil on kõik käepärast:
- OpenVZ server, täielik root-juurdepääs hostmasinale, võimalus peatada/mountida/käivitada/kustutada konteinerid.
- KVM-server, täielik root-juurdepääs host-masinale, koos kõigi sellest tulenevate funktsioonidega. Eeldatakse, et kõik on juba seadistatud ja valmis kasutamiseks.
Hakkame üleviimisega pihta
Enne üleviimise alustamist määratlegime mõisted, mis aitavad segadusse sattumisel:
KVM_NODE — KVM host-masin
VZ_NODE — OpenVZ host-masin
CTID — OpenVZ konteiner
VM — virtuaalne KVM-server
Valmistume üleviimiseks ja virtuaalmasinate loomiseks.
Samm 1
Kuna meil on vaja konteiner kuhugi üle viia, loome VM sarnase konfiguratsiooniga KVM_NODE.
Oluline! VM peab olema loodud just selle operatsioonisüsteemiga, mis praegu CTID-l töötab. Näiteks, kui CTID-l on installitud Ubuntu 14, siis peab ka VM-le olema paigaldatud Ubuntu 14. Väiksemad versioonid ei ole olulised ja nende mitteühtlustamine ei ole nii kriitiline, kuid peamised versioonid peavad olema samad.
Pärast VM loomist uuendame pakette nii CTID-l kui ka VM-l ( ära ajada segamini operatsioonisüsteemi uuendamisega - seda ei uuendata, uuendame vaid pakette ja, kui tuleb, OS-i versiooni peamise versiooni piires).
CentOS-i puhul näeb see protsess kahjutuna välja:
# yum clean all
# yum update -yJa mitte vähem kahjutuna Ubuntu, Debian puhul:
# apt-get update
# apt-get upgradeSamm 2
Paigaldame CTID, VZ_NODE ja VM utiliidi rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yEi installi seal ega seal midagi muud.
Samm 3
Teostame peatamise CTID järgnevaga VZ_NODE käsku
vzctl stop CTIDSeame pilt CTID:
vzctl mount CTIDLiigume kausta /vz/root/CTID ja teeme
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Chrootis loome faili /root/exclude.txt — see sisaldab nimekirja eranditest, mis ei jõua uuele serverile
/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Ühendame KVM_NODE ja käivitame meie VM, et see töötaks ja oleks võrgu kaudu ligipääsetav.
Nüüd on kõik valmis ülekolimiseks. Alustame!
4. samm
Endiselt chrootis, täidame
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/Rsynci käsk viib üle kolimise läbi, loodame, et võtmed on arusaadavad — üle kolimine toimub sümboolsete linkide, õiguste, omanikute ja gruppide säilitamisega ning krüptimine on välja lülitatud suurema kiirus saavutamiseks (kuigi oleks võinud kasutada mõnda kiiremat cipherit, pole see antud ülesande kontekstis nii oluline), samuti on välja lülitatud kompressioon.
Pärast rsynci lõpetamist väljuge chrootist (vajutades ctrl+d) ja täidame
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDSamm 5
Teeme mitu toimingut, mis aitavad meil VM-i käivitada pärast OpenVZ-st üleviimist.
Serverites, kus Systemd Käivitame käsu, mis aitab meil siseneda tavalisesse konsolisse, näiteks serveri VNC-ekraani kaudu.
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceServerites CentOS 6 ja CentOS 7 kindlasti installime värske tuuma:
yum install kernel-$(uname -r)Server võib sellelt käivituda, kuid pärast üleviimist võib see lõpetada töötamise või olla kustutatud.
Serveril CentOS 7 on vaja rakendada väike paranduste PolkitD jaoks, vastasel juhul kukub server lõputusse buutimiseks:
getent group polkitd >/dev/null && echo -e "e[1;32mpolkitd rühma juba eksisteerib e[0m" || { groupadd -r polkitd && echo -e "e[1;33mLisatud puuduv polkitd rühm e[0m" || echo -e "e[1;31mPolkitd rühma lisamine EBAÕNNESTUS e[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mpolkitd kasutaja juba eksisteerib e[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "PolkitD kasutaja" polkitd && echo -e "e[1;33mLisatud puuduv polkitd kasutaja e[0m" || echo -e "e[1;31mPolkitd kasutaja lisamine EBAÕNNESTUS e[0m"; }
rpm -Va polkit* && echo -e "e[1;32mpolkit* rpm verifitseerimine läbitud e[0m" || { echo -e "e[1;33mPolkit* rpm kasutaja/grupi omandi ja õiguste taastamine e[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }Kuna kõikidel серверites, kui mod_fcgid Apache'ile on installitud, teeme väikese paranduse õigustes, vastasel juhul kukuvad mod_fcgid'i kasutavad saidid 500 veaga:
chmod +s `which suexec` && apachectl restartJa viimane, tuleb kasuks Ubuntu ja Debian'i distributsioonidele. See operatsioonisüsteem võib sattuda lõputusse buutimise vea tõttu.
liigselt kiiresti. aeglusta käivitamist natuke
ebameeldiv, kuid lihtsalt lahendatav, olenevalt operatsioonisüsteemi versioonist.
VDS-l on võimalik installida: Debian 9 lahendus näeb välja selline:
täidame
dbus-uuidgenkui saame vea
/usr/local/lib/libdbus-1.so.3: version `LIBDBUS_PRIVATE_1.10.8′ not found
kontrollime LIBDBUS'i olemasolu
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 <-- seda on vaja
libdbus-1.so.3.14.16kui kõik on korras, täidame
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Kui ei aita — proovime teist varianti.
Teine lahendus probleemile liigselt kiiresti sobib praktiliselt kõigile Ubuntu ja Debian'i distributsioonidele.
Täidame
bash -x /var/lib/dpkg/info/dbus.postinst configureJa jaoks Ubuntu 14, Debian 7 täiendavalt täidame:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Mida me tegime? Taastasin messagebus'i, mida oli puudu Debian'i/Ubuntu käivitamiseks ja eemaldasin modules_dep'i, mis tuli OpenVZ-st ja takistas paljude tuumamoodulite laadimist.
Samm 6
Kaustame VM-i, kontrollime VNC-s, kuidas käivitamine läheb, ja ideaalis – kõik käivitub probleemideta. Kuigi võivad esineda mõned spetsiifilised probleemid pärast migratsiooni – kuid need on väljaspool selle artikli ulatust ja lahendatakse ilmnemisel.
Loodan, et see teave on kasulik! 🙂
Allikas: habr.com
