Alla som nÄgon gÄng har behövt flytta en OpenVZ-container till en server med fullstÀndig KVM-virtualisering har stött pÄ vissa problem:
- Det mesta av informationen Àr helt enkelt förÄldrad och var relevant för operativsystem med EOL-cykler som passerat för lÀnge sedan.
- Olika operativsystem erbjuder alltid olika information, och möjliga fel vid migration beaktas sÀllan.
- Ibland mÄste man hantera konfigurationer som stÀndigt vÀgrar att fungera efter migration.
NÀr man flyttar en server gÄr det alltid att ÄtgÀrda nÄgot under tiden, men vad hÀnder nÀr man flyttar ett helt kluster?
I den hÀr artikeln kommer jag att försöka förklara hur man korrekt migrerar en OpenVZ-container till KVM med minimal nedtid och snabba lösningar pÄ alla problem.
En liten introduktion: vad Àr OpenVZ och vad Àr KVM?
Vi gÄr inte in pÄ terminologi, utan sÀger i allmÀnna drag:
OpenVZ â virtualisering pĂ„ operativsystemsnivĂ„, vilket kan implementeras Ă€ven pĂ„ en mikrovĂ„gsugn, eftersom det inte finns nĂ„got behov av CPU-instruktioner och virtualiseringstekniker pĂ„ vĂ€rdmaskinen.
KVM â fullstĂ€ndig virtualisering som utnyttjar all CPU-kraft och kan virtualisera vad som helst, hur som helst, dela upp och kombinera.
Trots den allmĂ€nna uppfattningen att i miljön hostingleverantörer OpenVZ översĂ€ljs, medan KVM inte gör det â till lycka för sistnĂ€mnda, översĂ€ljs KVM numera inte sĂ€mre Ă€n sin motsvarighet.
Vad ska vi flytta?
För vÄra experiment för att flytta har vi anvÀnt hela skogen av operativsystem som Àr tillgÀngliga pÄ OpenVZ: CentOS (versioner 6 och 7), Ubuntu (versioner 14, 16 och 18 LTS), Debian 7.
Det antogs att en stor del av OpenVZ-containrarna redan kör nÄgot slags LAMP, och nÄgra har till och med mycket specifik mjukvara. Oftast var det konfigurationer med ISPmanager eller VestaCP (som ofta inte har uppdaterats pÄ flera Är). Deras krav pÄ migration mÄste ocksÄ beaktas.
Migrationen genomförs med bevarande av IP-adresser den flyttade containern, vi förutsÀtter att IP-adressen som innehades av containern behÄlls pÄ VM och kommer att fungera utan problem.
Innan flytten, lÄt oss se till att vi har allt vi behöver:
- OpenVZ-server, full root-Ätkomst till vÀrdmaskinen, möjlighet att stoppa/mounta/starta/ta bort containrar.
- KVM-server, full root-Ätkomst till vÀrdmaskinen, med alla konsekvenser. Det förutsÀtts att allt redan Àr instÀllt och klart för anvÀndning.
Vi pÄbörjar flytten
Innan vi börjar flytten, definierar vi termer som gör det lÀttare att förstÄ:
KVM_NODE â KVM vĂ€rdmaskin
VZ_NODE â OpenVZ vĂ€rdmaskin
CTID â OpenVZ behĂ„llare
VM â KVM virtuell server
Förberedelse för flytt och skapande av virtuella maskiner.
Steg 1
Eftersom vi behöver flytta behÄllaren, lÄt oss skapa VM med en liknande konfiguration pÄ KVM_NODE.
Viktigt! VM mÄste skapas pÄ det operativsystem som för nÀrvarande körs pÄ CTID. Till exempel, om CTID har Ubuntu 14 installerat, ska VM ocksÄ ha Ubuntu 14. Mindre versioner spelar ingen roll och deras skillnader Àr inte sÄ kritiska, men större versioner mÄste vara identiska.
Efter att VM har skapats, uppdaterar vi paketen pĂ„ CTID och VM (blanda inte med att uppdatera OS â vi uppdaterar inte operativsystemet, utan endast paketen och om det behövs, OS-versionen inom huvudversionen).
För CentOS ser denna process ofarlig ut:
# yum clean all
# yum update -yOch lika ofarlig för Ubuntu, Debian:
# apt-get update
# apt-get upgradeSteg 2
Installera pÄ CTID, VZ_NODE och VM verktyget rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yInga andra installationer görs varken dÀr eller dÀr.
Steg 3
Vi utför stopp CTID till VZ_NODE med kommandot
vzctl stop CTIDMontera bilden CTID:
vzctl mount CTIDVi gÄr till mappen /vz/root/CTID och utför
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Under chroot skapar vi filen /root/exclude.txt â den kommer att innehĂ„lla en lista över undantag som inte kommer att flyttas till den nya servern
/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-ens3Vi ansluter till KVM_NODE och startar vÄr VM, sÄ den fungerar och Àr tillgÀnglig över nÀtverket.
Nu Àr allt klart för flytt. LÄt oss köra!
Steg 4
Medan vi fortfarande Àr under chroot, utför vi
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/rsync-kommandot kommer att utföra flytten, vi hoppas att nycklarna Ă€r tydliga â flytten görs med bevarande av symlĂ€nkar, rĂ€ttigheter, Ă€gare och grupper, och kryptering Ă€r avstĂ€ngd för högre hastighet (man kunde ha anvĂ€nt en snabbare cipher, men det Ă€r inte sĂ„ kritiskt i den hĂ€r uppgiften), krympning Ă€r ocksĂ„ avstĂ€ngd.
Efter att rsync har avslutats, gÄr vi ut frÄn chroot (genom att trycka ctrl+d) och utför
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDSteg 5
Vi utför nÄgra ÄtgÀrder som hjÀlper oss att starta VM efter flytten frÄn OpenVZ.
PÄ servrar med Systemd utför vi ett kommando som hjÀlper oss att logga in i den vanliga konsolen, till exempel via VNC-anslutningen pÄ servern
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.servicePÄ servrar CentOS 6 och CentOS 7 mÄste vi absolut installera en ny kÀrna:
yum install kernel-$(uname -r)Servern kan laddas frÄn det, men efter flytt kan det sluta fungera eller tas bort.
PÄ servern CentOS 7 mÄste en liten fix appliceras för PolkitD, annars kommer servern att falla i en oÀndlig boot:
getent group polkitd >/dev/null && echo -e "e[1;32mpolkitd gruppen finns redane[0m" || { groupadd -r polkitd && echo -e "e[1;33mLa till den saknade polkitd-gruppen[0m" || echo -e "e[1;31mAtt lÀgga till polkitd-gruppen MISSLYCKADEe[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mpolkitd-anvÀndaren finns redane[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "AnvÀndare för polkitd" polkitd && echo -e "e[1;33mLa till den saknade polkitd-anvÀndaren[0m" || echo -e "e[1;31mAtt lÀgga till polkitd-anvÀndaren MISSLYCKADEe[0m"; }
rpm -Va polkit* && echo -e "e[1;32mpolkit* rpm-verifiering passeradee[0m" || { echo -e "e[1;33mĂ
terstÀller polkit* rpm anvÀndar-/gruppÀgande & rÀttighetere[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }PÄ alla servrar, om mod_fcgid har installerats för Apache, kör vi en liten fix med rÀttigheter, annars kommer webbplatser som anvÀnder mod_fcgid att falla med fel 500:
chmod +s `which suexec` && apachectl restartOch sist, det hÀr kan vara anvÀndbart för Ubuntu, Debian-distributioner. Detta operativsystem kan falla i en oÀndlig boot med felmeddelandet
looping too fast. throttling execution a little
obehagligt, men enkelt att fixa, beroende pÄ versionen av OS.
PÄ Debian 9 fixen ser ut sÄ hÀr:
vi kör
dbus-uuidgenom vi fÄr ett fel
/usr/local/lib/libdbus-1.so.3: version `LIBDBUS_PRIVATE_1.10.8âČ not found
kontrollerar vi om LIBDBUS finns
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 <-- den hÀr behövs
libdbus-1.so.3.14.16om allt Àr i ordning kör vi
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Om det inte hjÀlper - prova det andra alternativet.
Det andra alternativet för att lösa problemet med throttling execution a little fungerar praktiskt taget för alla Ubuntu och Debian-distributioner.
Kör
bash -x /var/lib/dpkg/info/dbus.postinst configureAllowed Logout URLs Ubuntu 14, Debian 7 ytterligare utför vi:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Vad gjorde vi? Vi ÄterstÀllde messagebus, som saknades för att starta Debian/Ubuntu och tog bort modules_dep, som kom frÄn OpenVZ och störde laddningen av mÄnga kÀrnmoduler.
Steg 6
Vi omstartar VM, verifierar via VNC hur starten gĂ„r och i bĂ€sta fall - allt laddas utan problem. Ăven om det kan uppstĂ„ vissa specifika problem efter migreringen - men de ligger utanför denna artikel och Ă„tgĂ€rdas nĂ€r de dyker upp.
Jag hoppas att denna information kommer att vara anvĂ€ndbar! đ
KĂ€lla: habr.com
