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.
OpenVZ xosting-provayderlari orasida haddan tashqari sotiladi, degan keng tarqalgan e'tiqoddan farqli o'laroq, KVM bo'lmaydi - baxtiga ikkinchisi uchun KVM endi o'z akasidan ko'ra ko'proq sotilgan.
Biz nimani olib ketamiz?
O'tkazish uchun sinov sub'ektlari sifatida biz OpenVZ-da mavjud bo'lgan operatsion tizimlarning butun o'rmonidan foydalanishimiz kerak edi: CentOS (6 va 7 versiyalar), 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 o'tkazilgan konteynerning IP-manzilini saqlab qolgan holda amalga oshiriladi; biz konteynerda bo'lgan IP 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! Hozirda CTID da ishlayotgan operatsion tizimda VM yaratishingiz kerak. Misol uchun, agar Ubuntu 14 CTID da o'rnatilgan bo'lsa, u holda Ubuntu 14 VM ga o'rnatilishi kerak.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).
CentOS uchun bu jarayon zararsiz ko'rinadi:
# yum clean all
# yum update -y
Ubuntu va Debian uchun ham zararsiz:
# apt-get update
# apt-get upgrade
2 bosqichma
O'rnatish CTID, VZ_NODE ΠΈ VM qulaylik rsync:
CentOS:
# yum install rsync -y
Debian, Ubuntu:
# apt-get install rsync -y
Biz u erda ham, u erda ham boshqa hech narsa o'rnatmayapmiz.
3 bosqichma
Biz to'xtab qolamiz CTID haqida VZ_NODE jamoa
vzctl stop CTID
Tasvirni 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-ens3
ga 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 CTID
5 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/[email protected] /etc/systemd/system/getty.target.wants/[email protected]
Serverlarda 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 restart
Va oxirgi narsa Ubuntu va Debian tarqatish uchun foydalidir. Ushbu OS xato bilan abadiy yuklashda qulashi mumkin
juda tez aylanish. ijroni biroz bostirish
yoqimsiz, lekin OS versiyasiga qarab osongina tuzatiladi.
ning Debian 9 tuzatish quyidagicha ko'rinadi:
amalga oshiramiz
dbus-uuidgen
agar 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.16
agar 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.3
Agar u yordam bermasa, ikkinchi variantni sinab ko'ring.
Muammoning ikkinchi yechimi ijroni biroz bo'g'ish Deyarli barcha Ubuntu va Debian distributivlari uchun javob beradi.
Biz bajaramiz
bash -x /var/lib/dpkg/info/dbus.postinst configure
Va 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 Debian/Ubuntu-ni ishga tushirish uchun etishmayotgan messagebus-ni tikladik va OpenVZ-dan kelgan modules_dep-ni olib tashladik va ko'plab yadro modullarini yuklashga xalaqit berdik.
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