Hayotida kamida bir marta OpenVZ konteynerini to'liq KVM virtualizatsiyasiga ega serverga o'tkazish kerak bo'lgan har bir kishi ba'zi muammolarga duch keldi:
- Ma'lumotlarning aksariyati shunchaki eskirgan va EOL siklidan uzoq vaqt o'tgan operatsion tizimlar uchun tegishli edi
- Turli xil operatsion tizimlar uchun har doim turli xil ma'lumotlar taqdim etiladi va migratsiya paytida yuzaga kelishi mumkin bo'lgan xatolar hech qachon hisobga olinmaydi
- Ba'zan siz har doim va keyin migratsiyadan keyin ishlashni xohlamaydigan konfiguratsiyalar bilan shug'ullanishingiz kerak
1 ta serverni uzatganingizda, siz har doim biror narsani tezda tuzatishingiz mumkin, lekin butun klasterni o'tkazganingizda?
Ushbu maqolada men sizga OpenVZ konteynerini minimal uzilishlar va barcha muammolarni tezda hal qilish bilan KVMga qanday qilib to'g'ri ko'chirishni aytib berishga harakat qilaman.
Kichik ta'lim dasturi: OpenVZ nima va KVM nima?
Biz terminologiyaga chuqur kirmaymiz, lekin umumiy ma'noda aytamiz:
OpenVZ — operatsion tizim darajasida virtualizatsiya, siz uni hatto mikroto'lqinli pechda ham o'rnatishingiz mumkin, chunki asosiy kompyuterda CPU ko'rsatmalari va virtualizatsiya texnologiyalariga ehtiyoj yo'q.
KVM - to'liq huquqli virtualizatsiya, protsessorning barcha kuchidan foydalangan holda va har qanday narsani virtualizatsiya qilish, uni uzunligi va ko'ndalang bo'ylab kesish.
Ommabop e'tiqodga zid ravishda, atrof-muhitda xosting provayderlari OpenVZ haddan tashqari ko'p sotilgan, ammo KVM unday emas. Yaxshiyamki, ikkinchisi uchun KVM endi akasi kabi ortiqcha sotilgan.
Biz nimani olib ketamiz?
OpenVZ da mavjud bo'lgan operatsion tizimlarning butun o'rmoni uzatish uchun sinov mavzusi sifatida ishlatilishi kerak edi: CentOS (6 va 7 versiyalari), Ubuntu (14, 16 va 18 LTS), Debian 7.
Taxminlarga ko'ra, OpenVZ konteynerlarining ko'pchiligi allaqachon qandaydir LAMP bilan ishlaydi, ba'zilarida esa o'ziga xos dasturiy ta'minot mavjud edi. Ko'pincha, bu ISPmanager, VestaCP boshqaruv paneli bilan konfiguratsiyalar edi (va ko'pincha yillar davomida yangilanmagan). Ularning transfer so'rovlari ham hisobga olinishi kerak.
Migratsiya saqlash bilan amalga oshiriladi IP manzillar Ko'chma konteyner uchun konteynerning IP-manzili VMda saqlangan va muammosiz ishlaydi deb taxmin qilamiz.
O'tkazishdan oldin, bizda hamma narsa borligiga ishonch hosil qilaylik:
- OpenVZ serveri, xost-mashinaga to'liq ildiz kirish, konteynerlarni to'xtatish/o'rnatish/boshlash/o'chirish qobiliyati
- KVM serveri, xost-mashinaga to'liq ildiz kirish, u nazarda tutgan barcha narsalar bilan. Hamma narsa allaqachon sozlangan va ishlashga tayyor deb taxmin qilinadi.
Keling, uzatishni boshlaylik
O'tkazishni boshlashdan oldin, chalkashmaslikka yordam beradigan shartlarni aniqlaymiz:
KVM_NODE - KVM xost mashinasi
VZ_NODE - OpenVZ xost mashinasi
CTID - OpenVZ konteyneri
VM - KVM virtual serveri
Migratsiyaga tayyorgarlik va virtual mashinalarni yaratish.
1 bosqichma
Konteynerni biror joyga ko'chirishimiz kerakligi sababli, biz yaratamiz VM ga o'xshash konfiguratsiya bilan KVM_NODE.
Muhim! Siz hozirda CTIDda ishlayotgan operatsion tizimda virtual mashina yaratishingiz kerak. Masalan, agar CTID ishlayotgan bo'lsa Ubuntu 14, keyin uni VMga ham o'rnatishingiz kerak Ubuntu 14. Kichik versiyalar muhim emas va ularning nomuvofiqligi unchalik muhim emas, lekin asosiy versiyalar bir xil bo'lishi kerak.
VM-ni yaratgandan so'ng, biz CTID va VM-dagi paketlarni yangilaymiz (OTni yangilash bilan adashtirmaslik kerak - biz uni yangilamaymiz, biz faqat paketlarni va agar u kelgan bo'lsa, OS versiyasini asosiy versiyada yangilaymiz. versiya).
uchun CentOS Bu jarayon zararsiz ko'rinadi:
# yum clean all
# yum update -yVa bundan ham zararsiz emas Ubuntu, Debian:
# apt-get update
# apt-get upgrade2 bosqichma
O'rnatish CTID, VZ_NODE и VM qulaylik rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yBiz u erda ham, u erda ham boshqa hech narsa o'rnatmayapmiz.
3 bosqichma
Biz to'xtab qolamiz CTID haqida VZ_NODE jamoa
vzctl stop CTIDTasvirni o'rnatish CTID:
vzctl mount CTID/vz/root/ jildiga o'tingCTID va bajaring
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Ildiz ostida /root/exclude.txt faylini yarating - u yangi serverga kirmaydigan istisnolar ro'yxatini o'z ichiga oladi.
/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-ens3ga ulanamiz KVM_NODE va bizning VMShunday qilib, u ishlaydi va tarmoq orqali kirish mumkin.
Endi hammasi transferga tayyor. Bor!
4 bosqichma
Hali ham sehr ostida, biz ijro etamiz
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/Rsync buyrug'i uzatishni amalga oshiradi, umid qilamizki, kalitlar aniq - uzatish simli havolalar, kirish huquqlari, egalari va guruhlari saqlanishi bilan amalga oshiriladi va shifrlash yuqori tezlikda o'chirilgan (siz tezroq shifrdan foydalanishingiz mumkin, lekin bu vazifa uchun bu unchalik muhim emas) , shuningdek, siqish o'chirilgan.
Rsync-ni tugatgandan so'ng, chroot-dan chiqing (ctrl+d tugmalarini bosib) va bajaring
umount dev && umount proc && umount sys && cd .. && vzctl umount CTID5 bosqichma
Keling, OpenVZ-dan o'tkazgandan so'ng VM-ni ishga tushirishga yordam beradigan bir necha qadamlarni bajaramiz.
bilan serverlarda Systemd Keling, oddiy konsolga kirishga yordam beradigan buyruqni bajaraylik, masalan, VNC server ekrani orqali
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceServerlarda CentOS 6 и CentOS 7 Yangi yadro o'rnatganingizga ishonch hosil qiling:
yum install kernel-$(uname -r)Serverni undan yuklash mumkin, lekin uzatilgandan so'ng u ishlamay qolishi yoki o'chirilishi mumkin.
Serverda CentOS 7 PolkitD uchun kichik tuzatishni qo'llashingiz kerak, aks holda server abadiy ishdan chiqadi:
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; }Barcha serverlarda, agar Apache uchun mod_fcgid o'rnatilgan bo'lsa, biz huquqlar bilan kichik tuzatishni amalga oshiramiz, aks holda mod_fcgid-dan foydalanadigan saytlar 500 xato bilan ishlamay qoladi:
chmod +s `which suexec` && apachectl restartVa nihoyat, bu foydali bo'ladi Ubuntu, Debian tarqatishlar. Ushbu OT xato bilan doimiy yuklashga kirishishi mumkin
juda tez aylanish. ijroni biroz bostirish
yoqimsiz, lekin OS versiyasiga qarab osongina tuzatiladi.
ning Debian 9 tuzatish quyidagicha ko'rinadi:
amalga oshiramiz
dbus-uuidgenagar biz xato qilsak
/usr/local/lib/libdbus-1.so.3: “LIBDBUS_PRIVATE_1.10.8” versiyasi topilmadi
LIBDBUS mavjudligini tekshiring
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.16agar hamma narsa tartibda bo'lsa, biz buni qilamiz
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Agar u yordam bermasa, ikkinchi variantni sinab ko'ring.
Muammoning ikkinchi yechimi ijroni biroz bo'g'ish deyarli hamma uchun mos Ubuntu и Debian tarqatishlar.
Biz bajaramiz
bash -x /var/lib/dpkg/info/dbus.postinst configureVa uchun Ubuntu 14, Debian 7 Bundan tashqari, biz quyidagilarni bajaramiz:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Biz nima qildik? Biz ishga tushirish uchun yetishmayotgan xabarlar avtobusini tikladik. Debian/Ubuntu va OpenVZ dan kelgan va ko'plab yadro modullarining yuklanishiga to'sqinlik qilgan modules_dep ni olib tashladi.
6 bosqichma
Biz VMni qayta ishga tushiramiz, VNC-da yuklash qanday ketayotganini tekshiramiz va ideal holda hamma narsa muammosiz yuklanadi. Garchi migratsiyadan keyin ba'zi o'ziga xos muammolar paydo bo'lishi mumkin bo'lsa-da, ular ushbu maqola doirasidan tashqarida va yuzaga kelganda tuzatiladi.
Umid qilamanki, bu ma'lumot foydalidir! 🙂
Manba: www.habr.com
